Sql 运行此问题的查询时未获取任何值
作业问题是 列出订单的客户名称、订单状态、订购日期、订单上的项目数量以及订单上项目数量大于300的平均订购数量 我正在使用Adventure Works 2019完成任务 我得到的答案是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
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子查询。