我正在尝试将一列文本和值转置为行标题。我已经研究了PIVOT
和UNPIVOT
函数,但是这个函数依赖于我收集的聚合。以下是我有兴趣实现的目标。
源表架构:
[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
这可能吗?
答案 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;