我正在尝试将一个单独的表连接到我的结果中,但与我读过的其他一些问题的方法不完全相同。 有一个类表:
ClassID
-------
1
2
3
和调度表
ClassID Block Day
------- ----- ---
1 5 1
1 4 2
1 5 2
2 2 1
2 3 2
3 1 1
3 1 2
3 1 3
我想要的输出是按类别按块分组,并连接成一行,如下所示:
ClassID Schedule
------- --------
1 5(1,2) 4(2)
2 1(2) 2(3)
3 1(1,2,3)
这可能吗?另一个可接受的(可能更容易的)输出是
ClassID Schedule
------- --------
1 5(1) 5(2) 4(2)
2 1(2) 2(3)
3 1(1) 1(2) 1(3)
答案 0 :(得分:0)
您可以使用STUFF
和FOR XML PATH
将逗号等分隔符连接到列值列表。
在这种情况下,您需要以嵌套方式执行此操作,一次连接特定block
的日期,然后根据class
进一步连接此日期
此外,在GUI层中做得更好,因为这种操作会影响性能。
<强> SQL Fiddle 强>
select classId, stuff(
(select distinct ' ' + T2.block + '(' +
stuff((select ','+ T1.Day
from Table1 T1
where T1.classId = T2.classId
and T1.Block = T2.Block
FOR XML PATH ('')),
1,1,'') +')'
from Table1 T2
where T2.classId = T.classId
for xml path('')), 1,1,'')
from Table1 T
group by classId
答案 1 :(得分:0)
使用:
select ClassID
,
stuff
((
select ' ' + t1.Block + '(' +
stuff
((
select ',' + t2.Day
from table1 t2
where t2.ClassID = t.ClassID and t2.Block = t1.Block
for xml path('')
), 1, 1, '') + ')'
from table1 t1
where t1.ClassID = t.ClassID
group by t1.Block
for xml path('')
), 1, 1, '')
from table1 t
group by t.ClassID