下表是我在sql server中遇到的问题的简化:
ID COLUMN_A COLUMN_B COLUMN_C
-------------------------------------
1 A B C
1 A B D
1 B C D
我想得到一个列由逗号连接而没有重复值的组。我尝试使用字符串\u agg(),但它返回:
ID COLUMN_A COLUMN_B COLUMN_C
-------------------------------------
1 A, A, B B, B, C C, D, D
这是我所做的查询:
SELECT ID, STRING_AGG(COLUMN_A, ', ') AS COL_A, STRING_AGG(COLUMN_B, ', ') AS COL_B,
STRING_AGG(COLUMN_C, ', ') AS COL_C
FROM MYTABLE
GROUP BY ID;
我想要下一个结果:
ID COLUMN_A COLUMN_B COLUMN_C
-------------------------------------
1 A, B B, C C, D
谢谢您!
3条答案
按热度按时间mkh04yzy1#
不使用
window functions
. 这个union
可能会放慢速度,但试一下,看看你是否能忍受这种表现。0yg35tkg2#
下面是基于xml和xquery的解决方案。
sql语句
输出
wecizke33#
不幸的是,
string_agg(distinct)
还不起作用。但是你可以做一些更复杂的事情:所以,尽管
STRING_AGG()
不会删除重复项,但会忽略NULL
价值观。