在 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
.
此外,不要对列别名使用单引号。仅对字符串和日期常量使用单引号。
当前结果:
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
.
此外,不要对列别名使用单引号。仅对字符串和日期常量使用单引号。