2014-02-15 77 views
0

使用子查詢,返回有折扣的所有訂單的貨幣價值 - 超過15% - 列出orderid和訂單價值這最後在頂部的最高值。SQL子查詢援助

我不斷收到錯誤消息。

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; 

錯誤是:

消息156,級別15,狀態1,2號線
關鍵字 'AS' 附近有語法錯誤。
Msg 156,Level 15,State 1,Line 9
關鍵字'GROUP'附近的語法不正確。

+2

你會得到什麼錯誤? – Randy

+0

Msg 156,Level 15,State 1,Line 2 關鍵字'AS'附近的語法不正確。 Msg 156,Level 15,State 1,Line 9 關鍵字'GROUP'附近的語法不正確。 – user3313555

+0

你能提供樣品數據和想要的結果嗎? –

回答

0

以下線路有問題: 選擇 SUM(od.orderid)由於訂單ID, AS [訂單價值]

在第二行AS之前沒有任何指定。要麼您之前錯過了列名稱,要麼刪除「AS OrderID」, 還有一點:將WHERE子句的=運算符更改爲IN。如果你的子查詢返回多個值,這是爲了避免錯誤。

您的查詢將是這樣的: USE羅斯文 GO

選擇 SUM(od.orderid)AS [訂單價值] FROM [訂單詳細信息] OD WHERE od.Discount IN(SELECT od.Discount FROM [訂單詳情] OD GROUP BY od.discount HAVING od.discount> 0.15) GROUP BY od.quantity,od.discount,od.UnitPrice ORDER BY [訂購Va的lues] ASC;

+0

請開始格式化您的帖子。另外,我強烈建議您使用JOIN而不是IN的產品查詢。 – ErikE

+0

感謝回覆,我能夠改變一些事情,並根據需要進行工作。我附上了下面的代碼。 USE [羅斯文] GO SELECT od.OrderID,SUM(od.orderid)AS [訂購值] FROM [訂單詳情] OD WHERE od.Discount IN(SELECT od.Discount FROM [訂單詳情] OD GROUP BY od.discount HAVING od.discount> .15) GROUP BY od.orderID,od.quantity,od.discount,od.UnitPrice ORDER BY [訂單價值] DESC GO 感謝所有的有指導和方向。 – user3313555

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; 
+0

由於沒有使用聚合,所以子選擇內的「having」並不是真正必要的。 –

+0

他至少想要一筆款項,可能是整個訂單都有折扣的任何訂單項。子查詢會在至少有一個打折項目的訂單中選擇未打折的訂單項。 – ErikE

+0

@ErikE。 。 。好的解釋。我沒有意識到原始查詢有多遠('sum(orderid)'!?!)。 –