如何在多个日期行上旋转 table
How to pivot table on multiple date rows
我正在尝试旋转 SQL 服务器 table,同时还按日期列分组。
这是我的示例数据:
日期
参考
计数
21 年 7 月 6 日
ref1
20
08/06/21
ref1
2
21 年 6 月 9 日
ref1
15
21 年 7 月 6 日
ref2
54
08/06/21
ref2
23
以及结果需要如何:
参考
21 年 7 月 6 日
08/06/21
21 年 6 月 9 日
ref1
20
2
15
ref2
54
23
是否可以使用 SQL 服务器 PIVOT
执行此操作,还是需要其他东西来进行分组?
日期也是动态的,并且基于日期范围。
SELECT C.REF,
SUM(
CASE
WHEN C.DATE='07/06/21' THEN C.COUNT ELSE 0 END
)AS '07_06_21',
SUM(
CASE
WHEN C.DATE='08/06/21' THEN C.COUNT ELSE 0 END
)AS '08_06_21',
SUM(
CASE
WHEN C.DATE='09/06/21' THEN C.COUNT ELSE 0 END
)AS '09_06_21'
FROM my_example_data AS C
GROUP BY C.REF
您可以随时尝试这种条件聚合方法
SELECT ref, [07/06/21],[08/06/21],[09/06/21] FROM
(SELECT ref, date , [count] FROM tableName) t1
PIVOT
(
SUM([count]) FOR [date] IN ([07/06/21],[08/06/21],[09/06/21])) AS t2
ORDER BY t2.ref
您需要动态数据透视查询才能执行此操作,请尝试以下查询
declare @columns varchar(max)='',@sql nvarchar(max);
Create table #temp (Name nvarchar(max));
insert into #temp select distinct date from tablename
SELECT @columns+=QUOTENAME(Name) + ',' from #temp
SET @columns = LEFT(@columns, LEN(@columns) - 1);
set @sql='SELECT * FROM
(select ref,count,date from tablename) t
PIVOT(sum([count])
FOR [Dates] IN ('+@columns+')
) AS pivot_table'
EXEC (@sql)
drop table #temp
我正在尝试旋转 SQL 服务器 table,同时还按日期列分组。
这是我的示例数据:
日期 | 参考 | 计数 |
---|---|---|
21 年 7 月 6 日 | ref1 | 20 |
08/06/21 | ref1 | 2 |
21 年 6 月 9 日 | ref1 | 15 |
21 年 7 月 6 日 | ref2 | 54 |
08/06/21 | ref2 | 23 |
以及结果需要如何:
参考 | 21 年 7 月 6 日 | 08/06/21 | 21 年 6 月 9 日 |
---|---|---|---|
ref1 | 20 | 2 | 15 |
ref2 | 54 | 23 |
是否可以使用 SQL 服务器 PIVOT
执行此操作,还是需要其他东西来进行分组?
日期也是动态的,并且基于日期范围。
SELECT C.REF,
SUM(
CASE
WHEN C.DATE='07/06/21' THEN C.COUNT ELSE 0 END
)AS '07_06_21',
SUM(
CASE
WHEN C.DATE='08/06/21' THEN C.COUNT ELSE 0 END
)AS '08_06_21',
SUM(
CASE
WHEN C.DATE='09/06/21' THEN C.COUNT ELSE 0 END
)AS '09_06_21'
FROM my_example_data AS C
GROUP BY C.REF
您可以随时尝试这种条件聚合方法
SELECT ref, [07/06/21],[08/06/21],[09/06/21] FROM
(SELECT ref, date , [count] FROM tableName) t1
PIVOT
(
SUM([count]) FOR [date] IN ([07/06/21],[08/06/21],[09/06/21])) AS t2
ORDER BY t2.ref
您需要动态数据透视查询才能执行此操作,请尝试以下查询
declare @columns varchar(max)='',@sql nvarchar(max);
Create table #temp (Name nvarchar(max));
insert into #temp select distinct date from tablename
SELECT @columns+=QUOTENAME(Name) + ',' from #temp
SET @columns = LEFT(@columns, LEN(@columns) - 1);
set @sql='SELECT * FROM
(select ref,count,date from tablename) t
PIVOT(sum([count])
FOR [Dates] IN ('+@columns+')
) AS pivot_table'
EXEC (@sql)
drop table #temp