在String_Agg内部不同

时间:2019-09-09 12:06:19

标签: sql sql-server distinct string-aggregation

我正在完成学校作业,尽管我已经完成了作业,因为我不能在String_Agg内使用“ distinct”。但是我不止一次获得“ SNS”,所以我在想是否有一种区分它的方法,所以我只获得了一次。

我尝试了distinct,但是发现它不适用于string_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"

我得到重复,所以我想摆脱重复,如果可能的话? :)

2 个答案:

答案 0 :(得分:0)

您的GROUP BYSELECT中应具有未汇总的列。 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来说似乎不太可能,那么您需要使用某种子查询来删除重复项。

答案 1 :(得分:0)

从分组依据中删除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