0

我有一个存储这样的值的表:

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

这是如何通过存储过程完成的......

4

1 回答 1

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 与演示

但是,将这些表规范化为合理的结构会好得多,这样您就可以在没有上述复杂性的情况下查询它们。

于 2013-04-02T11:38:21.167 回答