经过一段时间的搜索,我开始认为以下情况是不可能的。 任何人都可以以一种在循环中不包含那些有趣的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。
答案 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 ║
╚════════╩═══════╩═══════╩═══════╩═══════╝