Comment sélectionner des lignes aux colonnes dans SQL Server

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.