Sql 不同的内部字符串\u Agg

Sql 不同的内部字符串\u Agg,sql,sql-server,distinct,string-aggregation,Sql,Sql Server,Distinct,String Aggregation,我正在做一个学校作业,虽然我已经完成了,因为我不能在字符串中使用distinct\u Agg。但是我不止一次得到“SNS”,所以我在想是否有办法区分它,所以我只得到了一次 我尝试了distinct,但发现它不能与string\u agg一起使用,现在我正在尝试子查询,但我不知道如何操作 select FAG$.FagID, FagNavn, STRING_AGG(Lektion$.LaererID, ',') 'Lærer' from Fag$ join Lektion$ on Fag$.Fag

我正在做一个学校作业,虽然我已经完成了,因为我不能在
字符串中使用distinct\u Agg
。但是我不止一次得到“SNS”,所以我在想是否有办法区分它,所以我只得到了一次

我尝试了
distinct
,但发现它不能与
string\u agg
一起使用,现在我正在尝试子查询,但我不知道如何操作

select FAG$.FagID, FagNavn, STRING_AGG(Lektion$.LaererID, ',') 'Lærer'
from Fag$
join Lektion$
on Fag$.FagID= Lektion$.FagID
group by Fag$.FagID, FagNavn, LaererID
我预计产出为:

"NET = KBEN, SNS"
例如,而不是

"NET = KBEN"
"NET = SNS, SNS, SNS"

我得到了重复的,所以如果可能的话,我想去掉重复的?:)

您的
分组依据
应在
选择
中包含未聚合列
STRING_AGG()
是一个聚合函数。所以你可能想要:

select f.FagID, FagNavn, STRING_AGG(l.LaererID, ',') as Lærer
from Fag$ f join
     Lektion$ l
     on f.FagID = l.FagID
group by f.FagID, FagNavn;

如果仍然存在重复项(使用
id似乎不太可能),则需要使用某种子查询来删除重复项。

按从组中删除LaererID

select FAG$.FagID, FagNavn, STRING_AGG(Lektion$.LaererID, ',') 'Lærer'
from Fag$
join Lektion$
on Fag$.FagID= Lektion$.FagID
group by Fag$.FagID, FagNavn

从GROUPBY子句中删除LaererID。(您通常按照所选的相同列进行分组,除了那些是设置函数的参数的列之外。)太棒了!它成功了,现在我只需要缩小它的范围,因为“SNS”在“NET”中有15个选项,它将显示“NET=SNS,KBEN,SNS,SNS,SNS,SNS“我希望你明白我的意思!但你的解决方案在这一过程中帮助了我!:)@GordonLinoff我现在添加了它,谢谢:)所以如果我读对了(我对SQL非常陌生),我需要使用STRING_AGG(DISTINCT)而不是STRING_AGG(l.LaererID,,)?:)@蒂姆
LaererID
不应该被复制,所以你可能不需要
STRING\u AGG(DISTINCT l.LaererID,,')
。当我运行它时,我得到这样的输出:“NET=SNS,KBEN,SNS,SNS”,我无法摆脱那些额外的“SNS”,我认为你不能在字符串中运行DISTINCT\u AGG,是吗?@Tim。这取决于数据库,当我回答时它没有被标记。