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

标签 sql sql-server database

我是 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/

相关文章:

MySQL 日期通配符性能

sql-server - 如何使用Spring XD从oracle和sql server加载数据到HAWQ

sql - 连接字符串

java - 如何在 Java Web 应用程序中存储文件?

mysql - 自动分片 MySQL?

sql - 带有两个参数的 Rails 查询在生产环境中不起作用 : Operator does not exist

sql - 何时使用表运算符 APPLY

sql - 具有软删除行的 Postgresql 排除约束

c# - Winforms:如何使用 SqlCommand 查询带有 sql 函数的数据库?

php - 按数字排序表并获取列表编号