SQL中STRING_AGG去重方案咨询——校园作业遇重复值问题
解决STRING_AGG无法去重的问题
嘿,这个问题我之前也踩过坑!咱们一步步理顺来解决:
首先得指出你当前SQL里的小问题:你在GROUP BY里加了LaererID,这会让每一条老师的记录单独分组,反而导致STRING_AGG把重复的ID反复拼进去,完全偏离了你想要的效果。咱们得先把重复的老师ID去掉,再做聚合操作。
方法1:适用于所有支持STRING_AGG的SQL Server版本(2017+)
先通过CTE或者子查询,把每个课程对应的唯一老师ID筛选出来,再进行字符串聚合:
-- 用CTE先获取去重后的课程-老师关联关系 WITH UniqueTeacherCourses AS ( SELECT DISTINCT f.FagID, f.FagNavn, l.LaererID FROM Fag$ f JOIN Lektion$ l ON f.FagID = l.FagID ) -- 对去重后的结果做字符串聚合 SELECT FagID, FagNavn, STRING_AGG(LaererID, ', ') AS 'Lærer' FROM UniqueTeacherCourses GROUP BY FagID, FagNavn;
方法2:更简洁(适用于SQL Server 2022及以上)
从SQL Server 2022版本开始,STRING_AGG直接支持DISTINCT关键字,不用额外的子查询/CTE,一步到位:
SELECT f.FagID, f.FagNavn, STRING_AGG(DISTINCT l.LaererID, ', ') AS 'Lærer' FROM Fag$ f JOIN Lektion$ l ON f.FagID = l.FagID GROUP BY f.FagID, f.FagNavn;
这两种方法都能帮你把重复的'SNS'去掉,得到像NET = KBEN, SNS这样的干净结果。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

