SQL将列转置为行

时间:2016-12-13 16:04:17

标签: sql sql-server pivot transpose

我正在尝试将一列文本和值转置为行标题。我已经研究了PIVOTUNPIVOT函数,但是这个函数依赖于我收集的聚合。以下是我有兴趣实现的目标。

源表架构:

    [ID]    [Category]  [TextName]
       1         A          u
       1         B          v
       1         C          w
       2         A          x
       2         B          y
       2         C          z

结果转置:

[ID]    [A]   [B]   [C]
   1     u     v     w
   2     x     y     z

这可能吗?

2 个答案:

答案 0 :(得分:1)

即使我们每个单元格有一个值(行列组合),这仍然是一种聚合 Min / Max将为您提供所需的值,因为包括字符串在内的任何基本类型都定义了Min / Max。

select  *
from    t pivot (min([TextName]) for [Category]  in (A,B,C)) p    
+----+---+---+---+
| ID | A | B | C |
+----+---+---+---+
| 1  | u | v | w |
+----+---+---+---+
| 2  | x | y | z |
+----+---+---+---+

答案 1 :(得分:1)

SELECT id,
       MIN( CASE WHEN Category = 'A' THEN TextName END ) AS A,
       MIN( CASE WHEN Category = 'B' THEN TextName END ) AS B,
       MIN( CASE WHEN Category = 'C' THEN TextName END ) AS C
  FROM Table
GROUP BY id;