SQL 将列转为行
SQL Transposing columns to rows
我正在尝试将一列文本和值转置到行 headers。我研究了 PIVOT
和 UNPIVOT
函数,但这个函数依赖于我收集到的聚合。以下是我有兴趣实现的目标。
来源Table架构:
[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
这可能吗?
即使我们每个单元格只有一个值(行-列组合),这仍然是一种聚合。
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 |
+----+---+---+---+
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;
我正在尝试将一列文本和值转置到行 headers。我研究了 PIVOT
和 UNPIVOT
函数,但这个函数依赖于我收集到的聚合。以下是我有兴趣实现的目标。
来源Table架构:
[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
这可能吗?
即使我们每个单元格只有一个值(行-列组合),这仍然是一种聚合。
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 |
+----+---+---+---+
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;