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

时间:2013-12-27 15:19:08

标签: sql sql-server

我正在使用SQL Server 2008并继承了一个不使用多对多的数据库。他们改为使用逗号分隔的列。我已经找到了如何将逗号分隔值链接到程序名称。但是我需要一份程序清单和他们所属的办公室,比如这个

OFFICE表:

ID  Name
--- ------
1   HQ
2   PA
3   CEO

PRG表:

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

1 个答案:

答案 0 :(得分:1)

你可以设法做到这一点。但是,因为在字符串中存储列表是一个坏主意,我不想通过将它们放回逗号分隔的列表来复合它。相反,以下查询以更规范化的形式生成数据,每个办公室名称和程序占一行:

select o.name, p.name as program_name
from prg p join
     office o
     on ','+p.OfficeAffected+',' like '%,'+cast(o.id as varchar(255)) + ',%';