在查询中分组的SQL逗号分隔值
我正在使用SQLServer2008,继承了一个没有使用多对多的数据库。他们改为使用逗号分隔的列。我发现了如何将逗号分隔的值链接到程序名。但是我需要一份他们所属的项目和办公室的清单,就像这样在查询中分组的SQL逗号分隔值,sql,sql-server,Sql,Sql Server,我正在使用SQLServer2008,继承了一个没有使用多对多的数据库。他们改为使用逗号分隔的列。我发现了如何将逗号分隔的值链接到程序名。但是我需要一份他们所属的项目和办公室的清单,就像这样 办公室表格: ID Name --- ------ 1 HQ 2 PA 3 CEO ID Name Office Affected -- ---- --------------- A PRG1 1,3 B PRG2 2 C PRG3 2,3 D
办公室
表格:
ID Name
--- ------
1 HQ
2 PA
3 CEO
ID Name Office Affected
-- ---- ---------------
A PRG1 1,3
B PRG2 2
C PRG3 2,3
D PRG4 1,2
PRG
表格:
ID Name
--- ------
1 HQ
2 PA
3 CEO
ID Name Office Affected
-- ---- ---------------
A PRG1 1,3
B PRG2 2
C PRG3 2,3
D PRG4 1,2
我需要的输出:
Name Programs
---- ---------
HQ PRG1, PRG4
PA PRG2, PRG3, PRG4
CEO PRG1, PRG3
你可以做到这一点。然而,因为将列表存储在字符串中是一个坏主意,我不想通过将它们放回逗号分隔的列表中而使其复杂化。相反,以下查询以更规范化的形式生成数据,每个办公室名称和程序一行:
select o.name, p.name as program_name
from prg p join
office o
on ','+p.OfficeAffected+',' like '%,'+cast(o.id as varchar(255)) + ',%';
在进一步操作之前,您确实需要将逗号分隔的值拆分出来。您可以更改表定义吗?p.id不应该是o.id吗?