我有一个形状如下的数据集:
我正在尝试将数据转换为这种格式:
如您所见,我想按州和帐户类型对帐户和收入(每月)求和。值得注意的是,我寻求动态解决方案,因为这些不是唯一的值(硬编码不是一个选项!)。
我可以编写什么 SQL 查询来动态完成此任务? (因为这些值并不是完整数据集中存在的唯一值)。
谢谢!
最佳答案
我假设您希望按日期排列列,因此我们生成列的部分中的前 100% ... order by
示例
Declare @SQL varchar(max) = '
Select *
From (
Select [State]
,[AccountType]
,B.*
From YourTable A
Cross Apply ( values (concat(''Accounts_'',format([Date],''MM/dd/yyyy'')),Accounts)
,(concat(''Revenue_'' ,format([Date],''MM/dd/yyyy'')),Revenue)
) B (Item,Value)
) A
Pivot (sum([Value]) For [Item] in (' + Stuff((Select ','+QuoteName('Accounts_'+format([Date],'MM/dd/yyyy'))
+','+QuoteName('Revenue_' +format([Date],'MM/dd/yyyy'))
From (Select top 100 percent [Date] from YourTable Group By [Date] Order by [Date] ) A
For XML Path('')),1,1,'') + ') ) p'
--Print @SQL
Exec(@SQL)
返回
如果有帮助的话,生成的 SQL 如下所示:
Select *
From (
Select [State]
,[AccountType]
,B.*
From YourTable A
Cross Apply ( values (concat('Accounts_',format([Date],'MM/dd/yyyy')),Accounts)
,(concat('Revenue_' ,format([Date],'MM/dd/yyyy')),Revenue)
) B (Item,Value)
) A
Pivot (sum([Value]) For [Item] in ([Accounts_12/31/2017],[Revenue_12/31/2017],[Accounts_01/31/2018],[Revenue_01/31/2018]) ) p
关于SQL Server - 具有 2 个组变量和 2 个聚合计算的动态透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203669/