gpt4 book ai didi

SQL 服务器 : many-to-Many Join into Single Row

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:19 25 4
gpt4 key购买 nike

我是 SQL Server 的新手,所以如果我遗漏了一些明显的东西,请多多包涵。

我有一个包含表 RetailersWholesalersRetailerWholesaler 的数据库。

目前,每个零售商可以有零个、一个或两个批发商(当然,这可能会在没有通知的情况下发生变化!)。我在创建包含 RetailerID、PrimaryWholesalerID 和 SecondaryWholesalerID 列的 View 时遇到问题。无论我尝试了什么,我总是以单独行上的主要/次要结尾:

RetailerID | PrimaryWholesalerID | SecondaryWholesalerID
-----------+---------------------+----------------------
100 | 8888 | NULL
100 | NULL | 9999

我想要达到的目的是:

RetailerID | PrimaryWholesalerID | SecondaryWholesalerID
-----------+---------------------+----------------------
100 | 8888 | 9999

这是我目前拥有的脚本:

SELECT 
r.RetailerID,
CASE WHEN rw.RetailerWholesalerType = 'Primary'
THEN w.WholesalerID END PrimaryWholesalerID
CASE WHEN rw.RetailerWholesalerType = 'Secondary'
THEN w.WholesalerID END SecondaryWholesalerID
FROM
Retailers r
LEFT OUTER JOIN
RetailerWholesaler rw ON r.RetailerID = rw.RetailerID
LEFT OUTER JOIN
Wholesalers w ON rw.WholesalerID = w.WholesalerID

即使没有一级或二级批发商,我仍想显示 RetailerID

我正在使用 SQL Server 2017。在此先感谢您提供的任何帮助或见解。

最佳答案

您可以使用 MAX() 有条件地聚合结果

SELECT r.RetailerID,
MAX(CASE WHEN rw.RetailerWholesalerType = 'Primary'
THEN w.WholesalerID END) PrimaryWholesalerID
MAX(CASE WHEN rw.RetailerWholesalerType = 'Secondary'
THEN w.WholesalerID END) SecondaryWholesalerID
FROM Retailers r
LEFT OUTER JOIN RetailerWholesaler rw
ON r.RetailerID = rw.RetailerID
LEFT OUTER JOIN Wholesalers w
ON rw.WholesalerID = w.WholesalerID
GROUP BY r.RetailerID

关于SQL 服务器 : many-to-Many Join into Single Row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49040889/

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