我知道头衔最初没有意义。让我解释一下。
得到3个表:冷藏箱,纪律和判断
在冷藏表中我有ID,姓名和姓氏。
---------------
1 John Doe
2 john2 Doe2
3 etc
在Discipline表中,我获得了Discipline名称和id
------------
1 hockey
2 Basketball
3 football
4 etc
在JudgedBy表中,我从纪律和冷藏表中获得了外键。有冷藏ID和纪律ID。在一个运动学科中,可以有多个冷藏箱
---------------
1 4 //Discipline with id 1 is judged by reefer with id 4,2,3
1 2
1 3
我想要的是,在一列中选择纪律(名称),在其他列中选择冷藏,这样纪律只显示一次,所有冷藏在行中显示为字符串。像这样的东西
---------
|hockey| |John Doe , John2 Doe2, etc|
|Basketball| |Another reefer, Jet another reefer|
到目前为止,我已经完成了这项任务的两个部分,但我不能把它们放在一起。
为了选择学科和冷藏箱我使用内部联接
SELECT Discipline.Name, Reefers.name, Reefers.surname
FROM Discipline INNER JOIN
JudgedBy ON JudgedBy.Discipline_ID = Discipline.ID INNER JOIN
Reefers ON JudgedBy.Reefer_ID = Reefers.ID
我得到了
------------
hockey John Doe
hockey John2 Doe2
hockey Another one
其他部分是将它们放在一个字符串中。发现这件作品
declare @out as varchar(max)
set @out= ''
select @out = @out + Name + ' ' + Surnam + ', ' from Reefers
select @out as Game reefers
我如何把这两件作品放在一起?我希望我解释一下我想要实现的目标。
谢谢!
答案 0 :(得分:0)
在SQL Server中进行聚合字符串连接有点痛苦。它需要子查询和for xml path()
。
以下是您要执行的操作的示例:
select d.name,
stuff((select ', '+r.name + ' ' + r.surname
from JudgedBy jb join
Reefers r
on jb.Reefer_ID = r.ID
where jb.Discipline_ID = d.ID
for xml path ('')
), 1, 2, '')
from Discipline d;