sql server 转成行
Posted
技术标签:
【中文标题】sql server 转成行【英文标题】:sql server pivot into rows 【发布时间】:2014-05-15 08:30:02 【问题描述】:我怎样才能旋转这个
ID Allocate
552779 A - Level 2 Tier 1
552779 G - Level 2 Tier 2
552779 O - 4 Units
进入这个
记住 Allocate 可以是一组 86 个可能的已知字符串中的任何字符串值?我是否需要使用除 Pivot 之外的其他技术来执行此操作 - 新记录上最多可以有 6 个字符串,因为这将是 ID 与不同字符串关联的最大次数 这在本质上必须是动态的,有 6 个可能的列,但可能有 ID 号只有一个与之关联的字符串加上 5 个空值,另一个 ID 最多有六个与之关联的字符串以及 1 内的各种其他组合 - 6.1 2 3
552779 | A - 2 级 1 级 | G - 2 级 2 级 | O - 4 个单位
【问题讨论】:
你已有的代码在哪里? 【参考方案1】:WITH OrderedItems AS (
SELECT ID
,Allocate
,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Allocate) AS RowNumber
FROM Table
)
SELECT Id
,MAX(CASE WHEN RowNumber = 1 THEN Allocate ELSE NULL END) AS [1]
,MAX(CASE WHEN RowNumber = 2 THEN Allocate ELSE NULL END) AS [2]
...
FROM OrderedItems
GROUP BY Id
如果需要,您可以在最后一部分使用枢轴
【讨论】:
我应该说第 1 列中有数千个 id 重复,分配字段中有各种字符串,所以行数会很大? @user1491269,糟糕,忘记对行号进行分区。固定以上是关于sql server 转成行的主要内容,如果未能解决你的问题,请参考以下文章