首页 > 解决方案 > 当我对这个问题运行查询时没有得到任何价值

问题描述

作业问题是...

列出订单的客户名称、订单状态、订购日期、订单商品数量以及订单商品数量大于 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”相同并获得结果。任何想法将不胜感激。谢谢

标签: sqlssmsadventureworks

解决方案


基于在线快速查看架构(我没有安装它),我的理解是您需要通过 Sales.Customer 将 Person.Person 加入到 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

推荐阅读