Je ne sais pas s'il est possible de faire sans itération des sliders et de remplir des tables temporaires. J'ai du mal à sélectionner des données ressemblant à ceci:
+----------+-----------+-----------+ |TypeName | AlarmType | AlarmCount| +----------+-----------------------+ |Antibody | 1 | 2 | |Bacterium | 1 | 2 | |Bacterium | 3 | 2 | |CellLine | 1 | 2 | +----------+-----------+-----------+
dans le résultat comme ceci (il y a 3 AlarmType différents mais 2 sont énumérés):
+----------+-------+-------+-------+ |TypeName | Alarm1| Alarm2| Alarm3| +----------+-------+-------+-------+ |Antibody | 2 | 0 | 0 | |Bacterium | 2 | 0 | 2 | |CellLine | 2 | 0 | 0 | +----------+-------+-------+-------+
Comme vous pouvez le voir, AlarmCount
est maintenant affiché sous AlarmType
correspondant qui est maintenant colonne. S'il n'est pas possible de le faire, "vous ne pouvez pas le faire sans sliders" c'est aussi une bonne réponse.
Voici mon violon
Vous pouvez le faire de deux façons.
utilisez l' Conditional Aggregate
pour transposer le AlarmType
aux colonnes et affiche AlarmCount
correspondant sous chaque AlarmType
.
SELECT TypeName, Max(CASE WHEN AlarmType = 1 THEN AlarmCount ELSE 0 END) Alarm1, Max(CASE WHEN AlarmType = 2 THEN AlarmCount ELSE 0 END) Alarm2, Max(CASE WHEN AlarmType = 3 THEN AlarmCount ELSE 0 END) Alarm3 FROM alarms GROUP BY TypeName
Cela peut être fait par Pivot
aussi
SELECT TypeName, Isnull([1], 0) Alarm1, Isnull([2], 0) Alarm2, Isnull([3], 0) Alarm3 FROM (SELECT * FROM alarms) a PIVOT (Max(AlarmCount) FOR AlarmType IN([1], [2], [3])) piv
Remarque: Si vous ne connaissez AlarmType
colonne AlarmType
, vous devrez peut-être utiliser Dynamic Pivot
C'est l'approche UNION:
SELECT Alarm_Type_Name, SUM(Alarm1) AS Alarm1, SUM(Alarm2) AS Alarm2, SUM(Alarm3) AS Alarm3 FROM ( SELECT TypeName AS Alarm_Type_Name, SUM(AlarmCount) AS Alarm1, 0 AS Alarm2, 0 AS Alarm3 FROM ALARM_TEMP WHERE AlarmType = 1 GROUP BY TypeName, AlarmCount UNION SELECT TypeName AS Alarm_Type_Name, 0 AS Alarm1, SUM(AlarmCount) AS Alarm2, 0 AS Alarm3 FROM ALARM_TEMP WHERE AlarmType = 2 GROUP BY TypeName, AlarmCount UNION SELECT TypeName AS Alarm_Type_Name, 0 AS Alarm1, 0 AS Alarm2, SUM(AlarmCount) AS Alarm3 FROM ALARM_TEMP WHERE AlarmType = 3 GROUP BY TypeName, AlarmCount )a GROUP BY Alarm_Type_Name
J'espère que cette aide.