SQL Server - 具有 2 个组变量和 2 个聚合计算的动态透视

标签 sql sql-server dynamic pivot aggregate-functions

我有一个形状如下的数据集:

enter image description here

我正在尝试将数据转换为这种格式:

enter image description here

如您所见,我想按州和帐户类型对帐户和收入(每月)求和。值得注意的是,我寻求动态解决方案,因为这些不是唯一的值(硬编码不是一个选项!)。

我可以编写什么 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)

返回

enter image description here

如果有帮助的话,生成的 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/

相关文章:

c# - @indexName 附近的语法不正确。衣冠楚楚

mysql - 父子关系同表时一次插入多行

c# - 从数据 GridView 中读取数据

mysql - 如何更改 WAMP 上运行的 MySQL 中的只读变量

javascript - 从 node.js 查询 MSSQL 时使用日期

直到运行时才知道类型的 Java 类型转换

android - 我可以以编程方式选择 Android 布局文件夹吗?

grails - 如何获取 Grails 域对象的属性的类型(类)?

从 Visual Studio 2013 调用时 SQL LocalDb 自动实例启动失败,但不是 SQL Server Management Studio

mysql - 我陷入了简单的查询