我有一个包含两列的表:首先是一个id列(让我们称之为ID),然后是一个值列(让我们将其命名为VALUE)。 VALUE列可以有两个值:'一个'和'两个'大多数ID在表格中显示一次,其值为' One'或者'两个'。但是,有些ID会在列中出现两次:一次有价值' One'第二次有价值的' Two'。我现在正在尝试编写一个查询,该查询会生成一个包含两列的表,其中所有ID只出现一次。第一列应包含ID,第二列应包含值' One',' Two'或者'一个和两个'如果ID在原始表中有两个值。我的查询现在直到:
WITH (
SELECT id, 'One & Two' as value
FROM table_name
GROUP BY id HAVING COUNT(*) = 2
) AS both_values, (
SELECT id, value
FROM table_name
WHERE id NOT IN (SELECT id FROM both_values)
) AS other_values
SELECT * FROM other_values
UNION
SELECT * FROM both_values;
这种接缝不起作用,我无法编写一个简单的查询来获得此结果。有人可以帮帮我吗?
编辑:在' One& amp;之后添加:: varchar二'做到了。但是,它对我来说似乎不是一个有效的问题。有什么想优化的吗?
答案 0 :(得分:0)
找到解决方案:
SELECT STRING_AGG(DISTINCT value, ' & ' ORDER BY value),id
FROM table_name
GROUP BY id
没那么难......