问题描述
我被难住了。使用 sql Server 2019。
SELECT * FROM (VALUES
(1,'Alice','Alice'),(2,'Robert','Robert'),(3,'Bob'),(4,'Richard','Rich'),(5,'Rick'),(6,'Dick')
) tmp (ID,RealName,NickName)
鉴于此,我想制作一个表格,显示每个用户及其可能的昵称。我希望结果是:
姓名 | 又名 |
---|---|
爱丽丝 | NULL |
罗伯特 | 鲍勃 |
理查德 | Rich,Rick,Dick |
在 SO 上还有其他类似的问题,我研究过,但并没有完全解决从 AKA 列中省略 Name 的问题。 TIA
SQL Distinct comma delimited list
Produce DISTINCT values in STRING_AGG
解决方法
像这样:
with q as
(
SELECT * FROM (VALUES
(1,'Alice','Alice'),(2,'Robert','Robert'),(3,'Bob'),(4,'Richard','Rich'),(5,'Rick'),(6,'Dick')
) tmp (ID,RealName,NickName)
)
select RealName,string_agg(case when RealName <> NickName then NickName else null end,',') AKA
from q
group by RealName
输出
RealName AKA
-------- ---------------------
Alice NULL
Richard Rick,Rich,Dick
Robert Bob