【发布时间】:2019-03-18 05:51:09
【问题描述】:
我有下表
Code Data
SL Payroll 1
GV Payroll 3
Global Payroll 1
TimeHCM 1
SL Payroll 0
GV Payroll 0
Global Payroll 0
TimeHCM 0
SL Payroll 0
GV Payroll 0
Global Payroll 0
TimeHCM 0
我正在使用数据透视函数来展平数据
Select *
From (
Select [Code]
,[Data]
,[Col] = concat('Data',Row_Number() over (Partition By [Code] Order by 1/0))
From #BidStatusCalculation
) src
Pivot (max([Data]) for [Col] in ([Data1],[Data2],[Data3],[Data4],[Data5],[Data6],[Data7],[Data8],[Data9],[Data10],[Data11],[Data12])) pvt
我得到以下结果
Code Month1 Month2 Month3
GV Payroll 0 0 **3**
问题是它正在从下往上转置数据,这意味着它会获取它找到的第一条记录并使其成为最后一条记录,我希望它如下所示
Code Month1 Month2 Month3
GV Payroll **3** 0 0
我应该对查询进行哪些更改?
更新我按照建议添加了 SortOrder 列,现在表格如下所示。
Code Data SortOrder
SL Payroll 1 1
GV Payroll 3 2
Global Payroll 1 3
TimeHCM 1 4
SL Payroll 0 1
GV Payroll 0 2
Global Payroll 0 3
TimeHCM 0 4
SL Payroll 0 ....
GV Payroll 0
Global Payroll 0
TimeHCM 0
【问题讨论】:
-
是的,我是这么说的。添加一个身份或可以用来对它们进行排序的东西。如果您有订购能力,那么这很简单。但是为每个组设置列而不是行会好一百万倍。
-
如果你不使用
order by,看看为什么your data isn't ordered。另外,来自Aaron Bertrand in this answer。 -
@scsimon 太棒了!!!多年来,我一直在链接到康纳坎宁安的那篇文章。仅仅几天,它就从 MS 中删除了。他告诉我他会尝试恢复它。从来没有想过使用回程机。你今天赢得了互联网!!!
-
哈哈感谢@SeanLange 并寻找它让我更快地找到了 Aaron 的答案。不知道他们为什么删除它......我敢打赌谷歌分析它被链接了多少次。
-
发布一些代码而不是“我添加了订购者”怎么样?我宁愿首先使用条件聚合而不是枢轴来做这种事情。发布一些消耗性数据,我很乐意向您展示它是如何工作的。
标签: sql sql-server sql-server-2008