我已查看many other在这里发表了帖子,并且已经非常熟悉 Coalesce 函数,但我一直无法弄清楚如何执行此特定任务。
因此,我有一个佣金表和一个类别表。我创建了一个gist here这样您就可以通过一些示例数据看到确切的数据结构。基本上,Commission 表具有 SalesRepID、LocationID、CategoryID、SurgeonID 和 CommissionPercent 列。
Using a Coalesce function ,我已经能够通过传入 SalesRepID、LocationID 和 SurgeonID 来获得类似的信息:
.05 (Shirts), .05 (Shoes), .05 (Dresses), .10 (Hats), .15 (Pants)
但是,我试图让它看起来像:
.05 (Shirts, Shoes, Dresses), .10 (Hats), .15 (Pants)
我确实用 STUFF 尝试了几次,但从未得到我想要的结果。
这让我想问这在 MsSQL 2008 R2 中是否可能?如果是的话,任何帮助我获得我正在寻找的结果的帮助都将不胜感激。
非常感谢您的时间和精力,
安德鲁
最佳答案
谢谢你的要点!比拔牙来获取模式和数据要好得多。 :-) 如果您将其插入到您的要点查询中,您应该会看到您想要的结果(嗯,非常接近 - 见下文)。
DECLARE @SalesRepID int = 2,
@SurgeonID int = 1,
@LocationID int = 1;
;WITH x AS
(
SELECT CommissionPercent, Categories = STUFF((SELECT N', '
+ tCat.Category FROM #tCategories AS tCat
INNER JOIN #tCommissions AS tCom
ON tCat.CategoryID = tCom.CategoryID
WHERE tCom.CommissionPercent = com.CommissionPercent
FOR XML PATH,
TYPE).value(N'./text()[1]', N'nvarchar(max)'), 1, 2, N'')
FROM #tCommissions AS com
WHERE SalesRepID = @SalesRepID
AND SurgeonID = @SurgeonID
AND LocationID = @LocationID
),
y AS
(
SELECT s = RTRIM(CommissionPercent) + N' (' + Categories + N')'
FROM x GROUP BY CommissionPercent, Categories
)
SELECT Result = STUFF((SELECT N', ' + s FROM y
FOR XML PATH,
TYPE).value(N'./text()[1]', N'nvarchar(max)'), 1, 2, N'');
结果与您要求的略有不同,但您可以通过在拉取 CommissionPercent 时应用字符串格式来解决该问题。
Result
--------------------------------------------------------
0.05 (Shirts, Shoes, Dresses), 0.10 (Hats), 0.15 (Pants)
关于sql-server - 连接多个表中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405362/