我不知道有没有迭代游标和填充临时表的可能性。我很难选择如下所示的数据:
+----------+-----------+-----------+
|TypeName | AlarmType | AlarmCount|
+----------+-----------------------+
|Antibody | 1 | 2 |
|Bacterium | 1 | 2 |
|Bacterium | 3 | 2 |
|CellLine | 1 | 2 |
+----------+-----------+-----------+
变成这样的结果(有3种不同的AlarmType,但列出了2种):
+----------+-------+-------+-------+
|TypeName | Alarm1| Alarm2| Alarm3|
+----------+-------+-------+-------+
|Antibody | 2 | 0 | 0 |
|Bacterium | 2 | 0 | 2 |
|CellLine | 2 | 0 | 0 |
+----------+-------+-------+-------+
如您所见,AlarmCount
现在显示在相应AlarmType
的“现在是”列下。如果不可能做到这一点,那么“没有光标就无法做到”也是一个很好的答案。
您可以通过两种方式执行此操作。
用于Conditional Aggregate
将换位AlarmType
到列并AlarmCount
在每个列下显示相应的内容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
它可以通过做Pivot
也
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
注意:如果您不知道AlarmType
列,则可能需要雇用Dynamic Pivot
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句