在 T-SQL 中获取不同的逗号分隔字符串

问题描述

我被难住了。使用 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