通过存储过程从表中的逗号分隔列中获取记录

时间:2013-04-02 10:59:36

标签: sql-server-2008 stored-procedures comma

我有一个存储如下值的表:

Name      CategoryId
Gaurav    4,6
Amit      2,4
Ajay      6,2  

2,4,6(这是名称出现在其主表中的类别的ID)

像这样的主类表。

Id  CategoryName
2   Motor
4   Scooter
6   Car

我想首先从表中获取所有记录,并想要类别名称( 不是类别ID)。

Name       CategoryName
Gaurav     Scooter, Car
Amit       Motor, Scooter
Ajay       Car, Motor

如何通过存储过程完成...

1 个答案:

答案 0 :(得分:1)

这样的事可能有用:

with peopleCategory as
(
  select p.Name
    , c.CategoryName
  from people p
    inner join category c on charindex(',' + cast(c.Id as varchar(100)) + ','
                                     , ',' + p.CategoryId + ',') > 0
)
select p.Name
  , CategoryName = stuff
    (
      (
        select ',' + pc.CategoryName
        from peopleCategory pc
        where p.Name = pc.Name
        order by pc.CategoryName
        for xml path('')
      )
      , 1
      , 1
      , ''
    )
from people p
order by Name

SQL Fiddle with demo

然而,你可以更多,更多更好地将这些表规范化为一个合理的结构,这样你就可以在没有上述要求的复杂性的情况下查询它们。