在查询中分组的SQL逗号分隔值

在查询中分组的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

我正在使用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   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吗?