SQL Pivot帮助: 我有三个表如下: 班级表:
ID Name
1 N1
2 N2
3 N3
标志表:
ID ClassID Flags
1 1 F1
1 1 F2
1 2 F3
1 3 F1
1 3 F3
会话表:
ID ClassID Session
1 1 S1
2 1 S2
3 1 S3
4 2 S2
5 2 S5
6 3 S1
6 3 S2
现在我需要创建一个类似这样的视图:
班级观点:
ID Name Flags Session
1 N1 F1,F2 S1,S2,S3
2 N2 F3 S2,S5
3 N3 F1,F3 S1,S2
答案 0 :(得分:2)
最好的方法是在客户端的表示层中创建逗号分隔列表。您可以将表格加在一起,如:
select
class.id
, class.name
, flags.flags
, session.session
from class
left join flags on flags.classid = class.id
left join session on session.classid = class.id
虽然数据库不是为了格式化数据,但大多数数据库都支持某种生成逗号分隔列表的方法。例如,在MySQL中,您可以使用group_concat
:
select
class.id
, class.name
, group_concat(flags.flags separator ',')
, group_concat(session.session separator ',')
from class
left join flags on flags.classid = class.id
left join session on session.classid = class.id
group by class.id, class.name
如果您正在使用其他DMBS,请将其添加到您的问题中。
答案 1 :(得分:1)
从this SO question开始,我发现了以下内容:
select fs.ClassId
, fs.ClassName
, LEFT(fs.Flags, LEN(fs.Flags) - 2) as Flags
, LEFT(fs.Sessions, LEN(fs.Sessions) - 2) as Sessions
from (
select c.Id as ClassId
, c.[Name] as ClassName
, (
select Flags + N', ' as [text()]
from FlagsTable
where ClassId = c.Id
FOR XML PATH (N'')
) as Flags
, (
select Session + N', ' as [text()]
from SessionTable
where ClassId = c.Id
FOR XML PATH (N'')
) as Sessions
from ClassTable c
) fs