sql - SQL 将多行转置到不同的列
问题描述
我有 SQL Server 数据表,如下所示:
ID | 症状1 | 症状2 |
---|---|---|
1 | 一个 | 乙 |
1 | C | D |
2 | 乙 | F |
3 | 一个 | C |
3 | D | 乙 |
我想得到这个:
ID | 症状1 | 症状2 | 症状 3 | 症状4 |
---|---|---|---|---|
1 | 一个 | 乙 | C | D |
2 | 乙 | F | ||
3 | 一个 | C | D | 乙 |
这应该是一个“简单”的支点,但我无法弄清楚。如何编写 SQL 查询?
*编辑
对不起,我忽略了一个重要的细节。表中的行数非常大,大约 500.000,因此 ID 非常大。
解决方案
您可以将其作为自连接来执行 - 使用行号来拥有另一列 1 或 2(取决于 ID 出现的次数),应该始终出现 1,有时会出现 2,所以将这些行与 2 连接到那些上具有 1 的行(基于 id)为您提供最终结果..
WITH x AS(
SELECT
t.ID,
t.SYMPTOM1,
t.SYMPTOM2,
ROW_NUMBER() OVER (PARTITION BY t.ID ORDER BY t.SYMPTOM1) as rn
FROM t
)
SELECT
*
FROM
x x1
LEFT JOIN x x2 ON x1.id = x2.id AND x1.rn = 1 AND x2.rn = 2