首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用sql枢轴将行列列

如何使用sql枢轴将行列列
EN

Stack Overflow用户
提问于 2017-04-06 03:25:47
回答 1查看 45关注 0票数 1

如何使以下数据具有灵活的支点:

当前记录

代码语言:javascript
运行
复制
Year    Month   Week    Sales      Role
2017      1      1      1,000.00    SM
2017      1      1      1,000.00    PS
2017      1      2      1,001.00    PS    
2017      1      3      1,002.00    PS 
2017      1      4      1,003.00    PS 
2017      2      1      1,004.00    PS 
2017      2      2      1,005.00    PS 
2017      2      3      1,006.00    PS 
2017      2      4      1,007.00    PS

欲望输出

代码语言:javascript
运行
复制
Year  Role     1-1       1-2       1-3       1-4      2-1       2-2       2-3       2-4          
2017   PS   1,000.00  1,001.00  1,002.00  1,003.00  1,004.00  1,005.00  1,006.00  1,007.00
2017   SM   1,000.00  

当前我正在使用MSSQL 2016。希望你能积极回应。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-06 03:44:59

许多动态枢轴的例子,但这里有一个快速的答案。

你可能会注意到Order by cast(replace(Col,'-','.') as money)。这是为了确保列的正确顺序(而不是1,10,11,2,3)

动态SQL

代码语言:javascript
运行
复制
Declare @SQL varchar(max) = Stuff((Select ',' + QuoteName(Col) 
                                    From (
                                          Select Distinct Col=Concat(Month,'-',Week) From #YourTable 
                                         ) A
                                    Order by cast(replace(Col,'-','.') as money)
                                    For XML Path('')),1,1,'') 

Select  @SQL = '
Select [YAxis1] as [Year],[YAxis2] as [Role],' + @SQL  + '
From (
        Select YAxis1 = Year
              ,YAxis2 = Role
              ,XAxis  = Concat(Month,''-'',Week)
              ,Value  = Sales
         From  #YourTable
     ) A
 Pivot (sum(Value) For [XAxis] in (' + @SQL + ') ) p'
--Print  @SQL
Exec(@SQL);

返回

使用样本数据的

代码语言:javascript
运行
复制
Create Table #YourTable  (Year int,Month int,Week int,Sales decimal(10,2), Role varchar(25))
Insert Into #YourTable values
(2017,1,1,1000.00,'SM'),
(2017,1,1,1000.00,'PS'),
(2017,1,2,1001.00,'PS'), 
(2017,1,3,1002.00,'PS'), 
(2017,1,4,1003.00,'PS'), 
(2017,2,1,1004.00,'PS'), 
(2017,2,2,1005.00,'PS'), 
(2017,2,3,1006.00,'PS'), 
(2017,2,4,1007.00,'PS')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43245137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档