当我 运行 查询这个问题时没有得到任何价值

get no value when I run the query to this question

作业题是...

列出订单的客户名称、订单状态、订购日期、订单商品数量以及订单商品数量大于 300 件时的平均订购数量。

我正在使用 Adventure Works 2019 来完成作业。

我能想到的答案是....

SELECT
    LastName + ', ' + FirstName AS 'Customer Name',
    ssoh.Status AS 'Order Status',
    ssoh.OrderDate AS 'Date Order',
    SUM(ssod.Orderqty) AS 'Count of Items',
    AVG(ssod.Orderqty) AS 'Average Quantity'
FROM
    Person.Person pp
    JOIN Sales.SalesOrderHeader ssoh ON pp.BusinessEntityID = ssoh.CustomerID
    JOIN Sales.SalesOrderDetail ssod on ssoh.SalesOrderID = ssod.SalesOrderid
GROUP BY
    LastName + ', ' + FirstName,
    ssoh.OrderDate,
    ssoh.Status
HAVING
    SUM(ssod.OrderQty) > 300

当我将内部联接更改为外部联接时,我得到了客户名称的空值。我仔细检查了“customerID”外键以确保它与主键“BusinessEntityID”相同并获得结果。任何想法将不胜感激。谢谢

基于在线快速查看架构(我没有安装它),我的理解是您需要加入 Person.Person 到 Sales.Customer 到 Sales.SalesOrderHeader .所以或许可以尝试以下操作:

FROM
    Person.Person pp
    JOIN Sales.Customer sc ON pp.BusinessEntityID= sc.PersonID
    JOIN Sales.SalesOrderHeader ssoh ON sc.CustomerID= ssoh.CustomerID
    JOIN Sales.SalesOrderDetail ssod on ssoh.SalesOrderID = ssod.SalesOrderid

首先,按 LastName + ', ' + FirstName 分组会给您提供不准确的结果。 因为大约有 380 个名字重复。示例:

其次,Manachi关于加入是正确的。

所以,你的最终查询应该是这样的:

WITH cte AS (
    SELECT
        BusinessEntityID AS CustomerId,
        LastName + ', ' + FirstName AS 'Customer Name',
        ssoh.Status AS 'Order Status',
        ssoh.OrderDate AS 'Date Order',
        SUM(ssod.Orderqty) AS 'Count of Items',
        AVG(ssod.Orderqty) AS 'Average Quantity'
    FROM
        Person.Person pp
        JOIN Sales.Customer c ON c.PersonID = pp.BusinessEntityID
        JOIN Sales.SalesOrderHeader ssoh ON c.CustomerID = ssoh.CustomerID
        JOIN Sales.SalesOrderDetail ssod on ssoh.SalesOrderID = ssod.SalesOrderid
    GROUP BY
        BusinessEntityID,
        LastName + ', ' + FirstName,
        ssoh.OrderDate,
        ssoh.Status
    HAVING
        SUM(ssod.OrderQty) > 300
)
SELECT
    [Customer Name],
    [Order Status],
    [Date Order],
    [Count of Items],
    [Average Quantity]
    FROM cte