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

进入这个

               1           2            3

552779 | A - 2 级 1 级 | G - 2 级 2 级 | O - 4 个单位

记住 Allocate 可以是一组 86 个可能的已知字符串中的任何字符串值?我是否需要使用除 Pivot 之外的其他技术来执行此操作 - 新记录上最多可以有 6 个字符串,因为这将是 ID 与不同字符串关联的最大次数 这在本质上必须是动态的,有 6 个可能的列,但可能有 ID 号只有一个与之关联的字符串加上 5 个空值,另一个 ID 最多有六个与之关联的字符串以及 1 内的各种其他组合 - 6.

【问题讨论】:

你已有的代码在哪里? 【参考方案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 转成行的主要内容,如果未能解决你的问题,请参考以下文章

C#怎么将Json转成能用的

SQL Server 行转列,列转行。多行转成一列

Sql Server 数字金额转中文金额 函数

SQL表列数据转成行数据

sqlserver 怎么转成字符串

SQL Server 小知识