gpt4 book ai didi

sql - 如何正确分组这个表?

转载 作者:行者123 更新时间:2023-12-01 13:57:55 25 4
gpt4 key购买 nike

这是我的预期输出数据集。但是我在做这件事时遇到了问题。

此外,我附上了我创建的查询,但输出不正确。你能指出我的错误所在吗?

DROP TABLE #TEMP_ROLES
DROP TABLE #ORG_ROLES
CREATE TABLE #TEMP_ROLES
(
ID INT,
DESCRIPTIONS CHAR(15)
)

INSERT INTO #TEMP_ROLES VALUES (1, 'ROLE 1')
INSERT INTO #TEMP_ROLES VALUES (2, 'ROLE 2')
INSERT INTO #TEMP_ROLES VALUES (3, 'ROLE 3')
INSERT INTO #TEMP_ROLES VALUES (4, 'ROLE 4')
INSERT INTO #TEMP_ROLES VALUES (5, 'ROLE 5')

CREATE TABLE #ORG_ROLES
(
ID INT,
NAME CHAR(15),
)

INSERT INTO #ORG_ROLES VALUES (1, 'NAME_1')
INSERT INTO #ORG_ROLES VALUES (2, 'NAME_1')
INSERT INTO #ORG_ROLES VALUES (3, 'NAME_1')
INSERT INTO #ORG_ROLES VALUES (1, 'NAME_2')
INSERT INTO #ORG_ROLES VALUES (2, 'NAME_2')
INSERT INTO #ORG_ROLES VALUES (3, 'NAME_2')
INSERT INTO #ORG_ROLES VALUES (4, 'NAME_2')
INSERT INTO #ORG_ROLES VALUES (5, 'NAME_2')
INSERT INTO #ORG_ROLES VALUES (1, 'NAME_3')

这是我创建的查询,但输出不正确。

SELECT NAME,
CASE WHEN TR.ID = 1 THEN 'YES' ELSE 'NO' END AS ROLE_1,
CASE WHEN TR.ID = 2 THEN 'YES' ELSE 'NO' END AS ROLE_2,
CASE WHEN TR.ID = 3 THEN 'YES' ELSE 'NO' END AS ROLE_3,
CASE WHEN TR.ID = 4 THEN 'YES' ELSE 'NO' END AS ROLE_4,
CASE WHEN TR.ID = 5 THEN 'YES' ELSE 'NO' END AS ROLE_5
FROM #TEMP_ROLES TR
LEFT JOIN #ORG_ROLES R ON TR.ID = R.ID

预期输出:

NAME           ROLE_1   ROLE_2  ROLE_3  ROLE_4  ROLE_5
NAME_1 YES YES YES NO NO
NAME_2 YES YES NO YES YES
NAME_3 YES NO NO NO NO

最佳答案

你需要一些聚合。而且您不需要 JOIN:

SELECT R.NAME,
MAX(CASE WHEN R.ID = 1 THEN 'YES' ELSE 'NO' END) AS ROLE_1,
MAX(CASE WHEN R.ID = 2 THEN 'YES' ELSE 'NO' END) AS ROLE_2,
MAX(CASE WHEN R.ID = 3 THEN 'YES' ELSE 'NO' END) AS ROLE_3,
MAX(CASE WHEN R.ID = 4 THEN 'YES' ELSE 'NO' END) AS ROLE_4,
MAX(CASE WHEN R.ID = 5 THEN 'YES' ELSE 'NO' END) AS ROLE_5
FROM #ORG_ROLES R
GROUP BY R.NAME

关于sql - 如何正确分组这个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57579974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com