如何在多个日期行上透视表[重复]
Posted
技术标签:
【中文标题】如何在多个日期行上透视表[重复]【英文标题】:How to pivot table on multiple date rows [duplicate] 【发布时间】:2021-06-07 09:35:54 【问题描述】:我正在尝试旋转 SQL Server 表,同时还按日期列分组。
这是我的示例数据:
date | ref | count |
---|---|---|
07/06/21 | ref1 | 20 |
08/06/21 | ref1 | 2 |
09/06/21 | ref1 | 15 |
07/06/21 | ref2 | 54 |
08/06/21 | ref2 | 23 |
以及结果需要如何:
ref | 07/06/21 | 08/06/21 | 09/06/21 |
---|---|---|---|
ref1 | 20 | 2 | 15 |
ref2 | 54 | 23 |
是否可以使用 SQL Server PIVOT
执行此操作,还是需要其他东西来进行分组?
日期也是动态的,并且基于日期范围。
【问题讨论】:
你为什么不试试看? 透视是一种聚合形式,所以是的,你需要一个GROUP BY
。此外,如果这些日期不是一成不变的(我对此表示怀疑),您将需要一个动态支点。
这能回答你的问题吗? Convert Rows to columns using 'Pivot' in SQL Server
这能回答你的问题吗? SQL Server dynamic PIVOT query?
另外,您真的在使用 SQL Server 2008 吗?现在已经完全不支持2年了~。
【参考方案1】:
您需要动态数据透视查询才能在查询下方尝试执行此操作
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
【讨论】:
【参考方案2】: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
您可以随时尝试这种条件聚合方法
【讨论】:
不幸的是日期是动态的,所以在这种情况下这对我不起作用,但谢谢。 那么你的方式就是“动态支点”***.com/questions/10404348/…【参考方案3】: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
【讨论】:
一个好的答案提供了一个描述,以便 OP 可以学习,除了希望工作的代码。以上是关于如何在多个日期行上透视表[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Python:一次包含重复值的多个列的 Pandas 数据透视表