dll*_*ell 1 sql t-sql sql-server
我不知道是否可以在没有迭代游标和填充临时表的情况下进行操作.我无法选择如下所示的数据:
+----------+-----------+-----------+
|TypeName | AlarmType | AlarmCount|
+----------+-----------------------+
|Antibody | 1 | 2 |
|Bacterium | 1 | 2 |
|Bacterium | 3 | 2 |
|CellLine | 1 | 2 |
+----------+-----------+-----------+
Run Code Online (Sandbox Code Playgroud)
进入这样的结果(有3种不同的AlarmType但列出了2种):
+----------+-------+-------+-------+
|TypeName | Alarm1| Alarm2| Alarm3|
+----------+-------+-------+-------+
|Antibody | 2 | 0 | 0 |
|Bacterium | 2 | 0 | 2 |
|CellLine | 2 | 0 | 0 |
+----------+-------+-------+-------+
Run Code Online (Sandbox Code Playgroud)
如您所见,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
Run Code Online (Sandbox Code Playgroud)
它可以通过做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
Run Code Online (Sandbox Code Playgroud)
注意:如果您不知道AlarmType列,那么您可能需要使用Dynamic Pivot
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |