【发布时间】:2013-12-13 01:09:17
【问题描述】:
我是数据库界的菜鸟,刚开始学习,发现 SQLZoo 网站对我很有帮助。 我在 AdventureWorks 数据库中遇到了这个问题。
http://sqlzoo.net/wiki/AdventureWorks_hard_questions
12.对于每个订单显示 SalesOrderID 和 SubTotal 的三种计算方式: A) 从 SalesOrderHeader B) OrderQty*UnitPrice 的总和 C) OrderQty*ListPrice 的总和
由于某种原因,我无法弄清楚这一点。非常感谢任何帮助。
这是我的查询:
SELECT
A.SalesOrderID,
A.SubTotal AS SubTotalA,
B.SubtotalB,
C.SubtotalC
FROM SalesOrderHeader A
JOIN
(
SELECT SUM(sodB.OrderQty*sodB.UnitPrice) AS SubTotalB
FROM SalesOrderDetail sodB
JOIN ProductAW pawB
ON pawB.ProductID=sodB.ProductID
GROUP BY sodB.SalesOrderID
) AS B
JOIN
(
SELECT SUM(sodC.OrderQty*pawC.ListPrice) AS SubTotalC
FROM SalesOrderDetail sodC
JOIN ProductAW pawC
ON pawC.ProductID=sodC.ProductID
GROUP BY sodC.SalesOrderID
) AS C
由于某种原因,当我在 JOIN 之外单独运行 SELECT 语句 B 或 C 时,我得到了我期望的结果,但是当我将其放入 JOIN 时,SubTotalB 或 Subtotal C 的所有值都重复显示与第一行相同的结果价值。
SELECT SUM(sodC.OrderQty*pawC.ListPrice) AS SubTotalC
FROM SalesOrderDetail sodC
JOIN ProductAW pawC
ON pawC.ProductID=sodC.ProductID
GROUP BY sodC.SalesOrderID
或
SELECT SUM(sodC.OrderQty*pawC.ListPrice) AS SubTotalC
FROM SalesOrderDetail sodC
JOIN ProductAW pawC
ON pawC.ProductID=sodC.ProductID
GROUP BY sodC.SalesOrderID
【问题讨论】: