使用子查询返回所有具有折扣的订单的货币值 - 大于15% - 列出orderid
以及最后一个最高值的订单值。
我不断收到错误消息。
USE Northwind
GO
SELECT
SUM(od.orderid) As OrderID,
AS [Order Values]
FROM
[Order Details] od
WHERE
od.Discount = (SELECT od.Discount
FROM [Order Details] od
GROUP BY od.discount
HAVING od.discount >.15)
GROUP BY
od.quantity, od.discount, od.UnitPrice
ORDER BY
[Order Values] ASC;
错误是:
Msg 156,Level 15,State 1,Line 2
关键字“AS”附近的语法不正确。
Msg 156,Level 15,State 1,Line 9
关键字“GROUP”附近的语法不正确。
答案 0 :(得分:0)
以下是您的查询:
SELECT SUM(od.orderid) As OrderID,
AS [Order Values]
FROM [Order Details] od
WHERE od.Discount = (SELECT od.Discount
FROM [Order Details] od
GROUP BY od.discount
HAVING od.discount >.15
)
GROUP BY od.quantity, od.discount, od.UnitPrice
ORDER BY [Order Values] ASC;
它至少有两个句法错误。 AS [Order Values]
只是挥之不去。不正确。另外,对于可能返回多行的子查询,您有=
。即使你修复了这些问题,查询也不会做你想要的,我不认为。
编辑:
您想要的查询可能是:
SELECT od.orderid, sum( od.quantity * od.UnitPrice * (1 - od.discount)) as value
FROM [Order Details] od
GROUP BY od.orderid
HAVING sum(case when od.discount > 0.15 then 1 else 0 end) > 0
ORDER BY value desc;
答案 1 :(得分:0)
以下几行有问题: 选择 SUM(od.orderid)作为OrderID, AS [订单值]
第二行中AS之前没有指定任何内容。您之前错过了一个列名,或者您需要删除“AS OrderID” 还有一点:将WHERE子句的=运算符更改为IN。如果您的子查询返回多个值,则可以避免错误。
您的查询将如下所示: 使用Northwind GO
选择 SUM(od.orderid)AS [订单值] 从 [订单详情] od 哪里 od.Discount IN(SELECT od.Discount 来自[订单明细] od GROUP BY od.discount 有od.discount> .15) 通过...分组 od.quantity,od.discount,od.UnitPrice 订购 [订单价值] ASC;