以逗号分隔的表或结果集的不同值

时间:2014-04-26 20:02:31

标签: tsql sql-server-2012

因此,我有与产品类型不同的产品相关的规格表。我需要一个存储过程,它将在规范表(或所述规范表的结果集)中的每个列(用于站点导航代码)中返回单行唯一逗号分隔值。

我希望这是有道理的。

感谢大家到目前为止的回复。我会更详细地解释......

每个规范表都有不同数量的列(以及行)。让我们说其中一个有50,000行和一个制造商专栏。现在让我们假设这里还有5家独特的制造商。我们还假设同一个表也有一个颜色列,在所有50,000行中共享7种颜色。

我的(当前虚构的)存储过程应该返回一行,其中包含以下列...

  • 制造商
    Manu1,Manu2,Manu3,Manu4,Manu5
  • 颜色
    color1,color2,color3,color4,color5,color6,color7

我打算使用此结果来构建我的网站导航。

1 个答案:

答案 0 :(得分:1)

假设我已经理解:

declare @productTypes table (Id int, Name nvarchar(32))
declare @products table (Id bigint not null identity(1,1), ProductType int, ProductName nvarchar(32))

insert @productTypes (Id, Name)
select 1, 'Food'
union
select 2, 'Drink'

insert @products (ProductType, ProductName)
select 1, 'Chips'
union
select 1, 'Fish'
union
select 2, 'Guinness'
union
select 2, 'Water'
union
select 2, 'Pan Galactic Gargle Blaster'

select pt.Name 
, STUFF
(
    (
        Select ',' + a.ProductName
        from @products a
        where a.ProductType = pt.Id
        FOR XML PATH('')),1,1,''
) ProductsOfType
from @productTypes pt

SQL小提琴:http://sqlfiddle.com/#!6/e80ff/1

结果:

Name    ProductsOfType
Food    Chips,Fish
Drink   Guinness,Pan Galactic Gargle Blaster,Water