一个类别可以有很多产品。我必须构建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
答案 0 :(得分:2)
有几种使用SQL Server连接行的解决方案。请参阅this和this。
此查询生成您要求的结果集:
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