Sql 运行此问题的查询时未获取任何值

Sql 运行此问题的查询时未获取任何值,sql,ssms,adventureworks,Sql,Ssms,Adventureworks,作业问题是 列出订单的客户名称、订单状态、订购日期、订单上的项目数量以及订单上项目数量大于300的平均订购数量 我正在使用Adventure Works 2019完成任务 我得到的答案是 SELECT LastName + ', ' + FirstName AS 'Customer Name', ssoh.Status AS 'Order Status', ssoh.OrderDate AS 'Date Order', SUM(ssod.Orderqty) AS

作业问题是

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

基于在线快速查看架构(我没有安装它),我的理解是您需要通过Sales.Customer到Sales.SalesOrderHeader加入Person.Person。因此,不妨尝试以下方法:

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

非常感谢。那么连接的顺序导致了错误的信息被过滤?@Scoot,你仍然会得到错误的分组信息。谢谢@Zunayed,但是分配是针对我刚才介绍的连接章节的,不会有任何cte子查询。