我有一个包含2列plateno
和alerts
的表格。
表Data
plateno alerts
A 1
B 2
C 2
A 3
B 2
A 4
A 1
现在我想得到这样的结果:
alerts-> 1 2 3 4
---------------------------
A 2 0 1 1
B 0 2 0 0
C 0 1 0 0
我的意思是'A'有两个类型'1'的警报,1个类型'3'和'4'的警报......等等..
这是我正在尝试的查询
Select count(alert)
from mytable
group by plateno
答案 0 :(得分:2)
试试这个: -
Select plateno,[1],[2],[3],[4]
from
(
Select plateno,alerts from Sample
)p
pivot
(
count(alerts)
for alerts in ([1],[2],[3],[4])
)pvt
演示Here
答案 1 :(得分:2)
如果列Alert
的值的数量未知,则更优先选择动态sql ,
DECLARE @colList AS NVARCHAR(MAX), @sqlStatement AS NVARCHAR(MAX)
SELECT @colList = STUFF((SELECT DISTINCT ',' + QUOTENAME(alerts)
FROM data
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') ,1,1,'')
SET @sqlStatement = 'SELECT plateno,' + @colList + '
FROM
(
SELECT plateno, alerts
FROM data
) dta
pivot
(
COUNT(alerts)
FOR alerts IN (' + @colList + ')
) pvt '
EXECUTE(@sqlStatement)
输出
╔═════════╦═══╦═══╦═══╦═══╗
║ PLATENO ║ 1 ║ 2 ║ 3 ║ 4 ║
╠═════════╬═══╬═══╬═══╬═══╣
║ A ║ 2 ║ 0 ║ 1 ║ 1 ║
║ B ║ 0 ║ 2 ║ 0 ║ 0 ║
║ C ║ 0 ║ 1 ║ 0 ║ 0 ║
╚═════════╩═══╩═══╩═══╩═══╝
答案 2 :(得分:1)
试试这个:
SELECT plateno
,SUM(CASE alerts WHEN 1 THEN 1 ELSE 0 END) AS [1]
,SUM(CASE alerts WHEN 2 THEN 1 ELSE 0 END) AS [2]
,SUM(CASE alerts WHEN 3 THEN 1 ELSE 0 END) AS [3]
,SUM(CASE alerts WHEN 4 THEN 1 ELSE 0 END) AS [4]
FROM Table1
GROUP BY plateno
输出:
╔═════════╦═══╦═══╦═══╦═══╗
║ PLATENO ║ 1 ║ 2 ║ 3 ║ 4 ║
╠═════════╬═══╬═══╬═══╬═══╣
║ A ║ 2 ║ 0 ║ 1 ║ 1 ║
║ B ║ 0 ║ 2 ║ 0 ║ 0 ║
║ C ║ 0 ║ 1 ║ 0 ║ 0 ║
╚═════════╩═══╩═══╩═══╩═══╝
答案 3 :(得分:0)
Select plateno,sum([1]) as [1],sum([2]) as [2],sum([3]) as [3],sum([4]) as [4]
from
(
Select plateno,
case when alert=1 then 1 else 0 end as [1],
case when alert=2 then 1 else 0 end as [2],
case when alert=3 then 1 else 0 end as [3],
case when alert=4 then 1 else 0 end as [4]
from planet
)z
group by plateno
SQL小提琴 here