没有组的每x行的TSQL数据透视表

时间:2015-08-22 23:25:00

标签: sql sql-server tsql powershell

经过一段时间的搜索,我开始认为以下情况是不可能的。 任何人都可以以一种在循环中不包含那些有趣的RBAR的方式反驳我吗?

我有

形式的数千行数据
ItemName  ItemNumber
itemA     1
itemB     2
itemC     3
itemD     4
itemE     1
itemF     2
itemA     3
itemZ     4
itemX     1
itemQ     2
itemR     3
itemS     4

我的最终结果是希望将其变为以下格式

Column1  Column2  Column3  Column4
ItemA    ItemB    ItemC    ItemD
ItemE    ItemF    ItemA    ItemZ
ItemX    ItemQ    ItemR    ItemS

我尝试过旋转,但是如果我转动最大值(ItemNumber),这只返回顶行。 我已尝试过交叉标签,但他们似乎没有做我需要的事情。 列名在最终输出中可以为空。但是,如果在您的解决方案中有任何用途,则在第一组项目中定义它们。

是否有可能" pivot"这种数据,如果是这样,最好的方法是什么? 我正在使用SQL Server 2014,并希望将解决方案限制在TSQL中。 但是,如果在TSQL中不可行,您也可以考虑使用PowerShell。

1 个答案:

答案 0 :(得分:2)

你可以计算一个row_number,但我不知道要使用哪一列:

select * 
from ( select ItemName, ItemNumber
            , row_number() over (partition by ItemNumber order by  ItemName) rn
       from item 
      ) ps
pivot ( 
  MIN(ItemName)
  FOR ItemNumber IN ([1], [2], [3], [4])
) pt 

结果:

╔════════╦═══════╦═══════╦═══════╦═══════╗
║     rn ║   1   ║   2   ║   3   ║   4   ║
╠════════╬═══════╬═══════╬═══════╬═══════╣
║      1 ║ itemA ║ itemB ║ itemA ║ itemD ║
║      2 ║ itemE ║ itemF ║ itemC ║ itemS ║
║      3 ║ itemX ║ itemQ ║ itemR ║ itemZ ║
╚════════╩═══════╩═══════╩═══════╩═══════╝