gpt4 book ai didi

sql-server - 连接多个表中的多行

转载 作者:行者123 更新时间:2023-12-04 05:48:19 25 4
gpt4 key购买 nike

我已审核 many other在这里发帖并且已经非常熟悉 Coalesce 功能,但我一直无法弄清楚如何完成这项特定任务。

所以,我有一个佣金表和一个类别表。我创建了一个 gist here因此您可以通过一些示例数据查看确切的数据结构。基本上,佣金表有一个 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, @SurgeonID INT, @LocationID INT;
SELECT @SalesRepID = 2, @SurgeonID = 1, @LocationID = 1;

;WITH x AS
(
SELECT CommissionPercent, Categories = STUFF((SELECT ', '
+ 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('.', 'NVARCHAR(MAX)'), 1, 2, '')
FROM #tCommissions AS com
WHERE SalesRepID = @SalesRepID
AND SurgeonID = @SurgeonID
AND LocationID = @LocationID
),
y AS
(
SELECT s = RTRIM(CommissionPercent) + ' (' + Categories + ')'
FROM x GROUP BY CommissionPercent, Categories
)
SELECT Result = STUFF((SELECT ', ' + s FROM y
FOR XML PATH, TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '');

结果与您要求的略有不同,但您可以通过在提取 CommissionPercent 时应用字符串格式来解决该问题。
Result
--------------------------------------------------------
0.05 (Shirts, Shoes, Dresses), 0.10 (Hats), 0.15 (Pants)

关于sql-server - 连接多个表中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com