SQL Server:多对多加入单行

蒂姆

我对 SQL Server 比较陌生,所以如果我遗漏了一些明显的东西,请耐心等待。

我有一个表的数据库RetailersWholesalersRetailerWholesaler

目前,每个零售商可以拥有零个、一个或两个批发商(当然,这可能会在不经意间发生变化!)。我在创建包含 RetailerID、PrimaryWholesalerID 和 SecondaryWholesalerID 列的视图时遇到问题。无论我尝试过什么,我都会在不同的行上使用 Primary/Secondary:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章