PIVOT SQL 与分组依据
PIVOT SQL with Group By
我有以下 table:
groupof dateof statusof
A 2020-01-01 00:00:00 YES
A 2020-02-01 00:00:00 NO
A 2020-03-01 00:00:00 YES
B 2020-01-01 00:00:00 YES
然后我有以下查询:
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT ',' + QUOTENAME(dateof) from Table1 group by dateof order by dateof
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT groupof,' + @cols + ' from
(select groupof, dateof, statusof from Table1) x
pivot
(count(statusof) for dateof in (' + @cols + ')) p '
execute(@query);
结果是:
groupof 2020-01-01 00:00:00 2020-02-01 00:00:00 2020-03-01 00:00:00
A 1 1 1
B 1 0 0
我想要得到以下结果:
groupof 2020-JAN 2020-FEB 2020-MAR
A YES NO YES
B YES NULL NULL
我怎样才能做到这一点?
要从 PIVOT
列中获取精确值,请使用 MAX
聚合函数。
此外,您需要格式化 dateof
以根据需要获取列的格式化名称。您可以根据需要定义任何日期时间格式。查看更多格式选项 here.
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT ',' + QUOTENAME(FORMAT(dateof, 'yyyy-MMM')) from Table1 group by dateof order by dateof
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT groupof,' + @cols + ' from
(select groupof, dateof, statusof from Table1) x
pivot
(MAX(statusof) for dateof in (' + @cols + ')) p '
execute(@query);
我有以下 table:
groupof dateof statusof
A 2020-01-01 00:00:00 YES
A 2020-02-01 00:00:00 NO
A 2020-03-01 00:00:00 YES
B 2020-01-01 00:00:00 YES
然后我有以下查询:
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT ',' + QUOTENAME(dateof) from Table1 group by dateof order by dateof
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT groupof,' + @cols + ' from
(select groupof, dateof, statusof from Table1) x
pivot
(count(statusof) for dateof in (' + @cols + ')) p '
execute(@query);
结果是:
groupof 2020-01-01 00:00:00 2020-02-01 00:00:00 2020-03-01 00:00:00
A 1 1 1
B 1 0 0
我想要得到以下结果:
groupof 2020-JAN 2020-FEB 2020-MAR
A YES NO YES
B YES NULL NULL
我怎样才能做到这一点?
要从 PIVOT
列中获取精确值,请使用 MAX
聚合函数。
此外,您需要格式化 dateof
以根据需要获取列的格式化名称。您可以根据需要定义任何日期时间格式。查看更多格式选项 here.
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT ',' + QUOTENAME(FORMAT(dateof, 'yyyy-MMM')) from Table1 group by dateof order by dateof
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT groupof,' + @cols + ' from
(select groupof, dateof, statusof from Table1) x
pivot
(MAX(statusof) for dateof in (' + @cols + ')) p '
execute(@query);