SQL子查询辅助

时间:2014-02-15 16:11:56

标签: sql-server

使用子查询返回所有具有折扣的订单的货币值 - 大于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”附近的语法不正确。

2 个答案:

答案 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;