合并连接表中的字段

时间:2009-05-29 13:16:45

标签: sql sql-server tsql

一个类别可以有很多产品。我必须构建StoredProcedure,它返回所有类别,其中一些数据来自Products,合并到一个字段中:

SP Result:
idCategory Name   ProductNames         ProductQuantities 
1          Cat1   Procut1,Product2     24,32
2          Cat2   ProductX,ProductY    0,61

ProductNames和ProductQuantities是varchar字段,其中包含来自连接的Product表的组合(连接)字段值。这就是我在DB中所拥有的:

Category table:
idCategory   Name
1            Cat1
2            Cat2

Product table:
idProduct  idCategory Name      Quantity 
1          1          Product1  24
2          1          Product2  32
3          2          ProductX  0
4          2          ProductY  61 

我还想要函数,它为输入参数idCategory = 1返回“Product1,Product2”,如下所示:

SELECT idCategory, 
       dbo.NamesFn(idCategory) AS ProductNames,
       dbo.QuantitiesFn(idCategory) AS ProductQuantities 
FROM Category

可能有一个函数返回Table Result,因此加入只会进行一次,而不是每个Fn(因为这是简化的例子,在真实应用中我必须有4-5个组合字段,或者将来更多) ?

如何编写SQL / SP& FN?我正在使用MS SQL2005

1 个答案:

答案 0 :(得分:2)

有几种使用SQL Server连接行的解决方案。请参阅thisthis

此查询生成您要求的结果集:

select c.idCategory, c.Name,
    replace(
        (select p.Name as [data()]
         from Product p
     where p.idCategory = c.idCategory
     for xml path ('')
), ' ', ', ') as ProductNames,
    replace(
        (select p.Quantity as [data()]
         from Product p
     where p.idCategory = c.idCategory
     for xml path ('')
), ' ', ', ') as ProductQuantities 
from Category c

编辑添加: 此查询生成结果:

idCategory  Name    ProductNames          ProductQuantities
1           Cat1    Product1, Product2    24, 32
2           Cat2    ProductX, ProductY    0, 61