我有一个结果集,我想通过Service
列“展平”。示例将最好地解释它:
给定这个结果集(让我们称之为request
):
---------------------------------------
| Id | Service | C1 | ... | Cn |
--------------------------------------|
| 1 | A | 5 | | 3 |
--------------------------------------|
| 1 | B | 2 | | 1 |
--------------------------------------|
| 2 | A | 9 | | 4 |
--------------------------------------
我想得到这个:
---------------------------------------------------------------------------
| Id | ServiceA_C1 | ... | ServiceA_Cn |ServiceB_C1 | ... | ServiceB_C2n |
---------------------------------------------------------------------------
| 1 | 5 | ... | 3 | 2 | ... | 1 |
---------------------------------------------------------------------------
| 2 | 9 | ... | 4 | NULL | ... | NULL |
---------------------------------------------------------------------------
最终期望的结果:
- 每个 Id(有多个值现在只有一行)
- 服务的每个不同值将
n
在最终结果集中具有列
当前解决方案(有效,但超长且效率不高):
SELECT A.C1 AS ServiceA_C1, ..,A.Cn AS ServiceA_Cn,B.C1 AS ServiceB_C1, ..,B.Cn AS ServiceB_Cn
FROM (SELECT *
FROM request
WHERE Service = 'A') AS A
JOIN
(SELECT *
FROM request
WHERE Service = 'B') AS B
ON A.Id = B.Id
注:
服务数量约为 10(#distinct 值Service
列中的#distinct 值),这是问题本身的通用措辞。
我知道 SQL 操作,如枢轴、反枢轴、交叉应用、连接等,但这个问题仍然让我烦恼,因为我没有找到立即解决这个问题的棘手问题。我很高兴知道其中一种方法可以解决这个问题,但我错过了。
谢谢