在 SQL 中连接行和列

Joining rows and columns in SQL

当前结果:

ID | Item      | Red | Green | Blue | Yellow
03   balloon      1      0       0      0
03   balloon      0      1       0      0
03   balloon      1      0       0      1
24   ribbon       0      0       1      0
24   ribbon       0      1       0      0
24   ribbon       0      0       0      1
24   ribbon       1      0       0      0

期望的结果:

ID | Item      | Red | Green | Blue | Yellow
03   balloon      1      1       0      1
24   ribbon       1      1       1      1

我不希望它们像我当前的结果那样重复。

这是我的查询:

SELECT DISTINCT tb1.ID
      , tb1.Item
      , (CASE WHEN tb2.color = 'Red' THEN 1 END) AS 'Red'
      , (CASE WHEN tb2.color = 'Green' THEN 1 END) AS 'Green'
      , (CASE WHEN tb2.color = 'Blue' THEN 1 END) AS 'Blue'
      , (CASE WHEN tb2.color = 'Yellow' THEN 1 END) AS 'Yellow'
FROM #table1 tb1
LEFT JOIN #table2 tb2 ON tb1.ID = tb2.ID 

我也尝试过不使用 distinct,但我不知道如何改变才能让它看起来像想要的结果。

使用聚合:

SELECT tb1.ID, tb1.Item
      MAX(CASE WHEN tb2.color = 'Red' THEN 1 ELSE 0 END) AS Red,
      MAX(CASE WHEN tb2.color = 'Green' THEN 1 ELSE 0 END) AS Green,
      MAX(CASE WHEN tb2.color = 'Blue' THEN 1 ELSE 0 END) AS Blue,
      MAX(CASE WHEN tb2.color = 'Yellow' THEN 1 ELSE 0 END) AS Yellow
FROM #table1 tb1 LEFT JOIN
     #table2 tb2 
     ON tb1.ID = tb2.ID 
GROUP BY tbl1.ID;

请注意,您当前的结果应该返回 NULL 而不是 0。我添加了 ELSE 0,所以你明确地得到 0.

此外,不要对列别名使用单引号。仅对字符串和日期常量使用单引号。