我们说我们有一张桌子:
ID | ItemId | Value |
1 | 201 | Green |
2 | 301 | Wood |
2 | 201 | Red |
4 | 201 | Green |
1 | 301 | Iron |
所以{ItemId:Type} - > {201:颜色},{301:材料}
有没有办法生成以下结果集?
ID | Color | Material |
1 | Green | Iron |
2 | Red | Wood |
4 | Green | (null) |
因此,根据ItemId
,将Value
放在第1列或第2列中。
答案 0 :(得分:1)
您可以使用CASE...WHEN
有选择地识别结果列来模拟数据透视表。你需要将它与一个聚合(它将去除NULL)结合起来,最后GROUP BY
来压缩行:
SELECT ID,
MIN(CASE WHEN ItemId = 201 THEN Value ELSE NULL END) AS Color,
MIN(CASE WHEN ItemId = 301 THEN Value ELSE NULL END) AS Material
FROM MyTable
GROUP BY ID
ORDER BY ID ASC;
答案 1 :(得分:1)
您可以使用case
根据Value
值抓取ItemId
,然后使用group by
ID
来聚合两行ID
max
1}}在一个中,同时使用null
(或其他聚合函数)排除select ID
, max(case when ItemId = 201 then Value end) as Color
, max(case when ItemId = 301 then Value end) as Material
from tbl
group by ID
值:
{{1}}