2011-03-09 34 views
0

我有一個子查詢,只是獲得每個itemID銷售的物品數量的總和。我想獲得該子查詢的結果並將其乘以商品價格。但是當我嘗試引用用於子查詢的列別名時,Slq服務器給了我一個錯誤,說我嘗試使用的列是無效的。這是我的sql ...如何使用從子查詢返回的數據?

SELECT  TOP (100) PERCENT Shop_1.ShopName, CustomerOrdersDtl_1.ItemID, ItemList_1.ItemName, SUM(CustomerOrdersDtl_1.Amount) AS tAmount 
FROM   dbo.CustomerOrders AS CustomerOrders_1 INNER JOIN 
         dbo.CustomerOrdersDtl AS CustomerOrdersDtl_1 ON CustomerOrders_1.ID = CustomerOrdersDtl_1.CustomerOrdersID INNER JOIN 
         dbo.ItemList AS ItemList_1 ON CustomerOrdersDtl_1.ItemID = ItemList_1.ID INNER JOIN 
         dbo.Shop AS Shop_1 ON CustomerOrders_1.ShopID = Shop_1.ID 
GROUP BY Shop_1.ShopName, CustomerOrdersDtl_1.ItemID, ItemList_1.ItemName, ItemList_1.Price 
ORDER BY Shop_1.ShopName 

我試圖使用的列是tAmount。我想在它後面有另一個列,TotalCost,顯示價格* tAmount。當我將(Itemlist_1.Price * tAmount)設置爲TotalItemCost時,出現錯誤,說明tAmount是無效的列。

是否可以引用子查詢返回的數據?還是有另一種方法來做到這一點?

非常感謝所有幫助。 :)

回答

2

tAmount列在查詢中不可用。像SUM(CustomerOrdersDtl_1.Amount) * Itemlist_1.Price可能工作。

否則嘗試使用子選擇:相同的查詢範圍內

SELECT TOP (100) PERCENT sqry.ShopName, sqry.ItemID, sqry.ItemName, sqry.tAmount, sqry.Price*sqry.tAmount as TotalItemCost 
FROM 
(SELECT  Shop_1.ShopName AS ShopName, CustomerOrdersDtl_1.ItemID AS ItemID, ItemList_1.ItemName AS ItemName, SUM(CustomerOrdersDtl_1.Amount) AS tAmount, Itemlist_1.Price AS Price 
FROM   dbo.CustomerOrders AS CustomerOrders_1 INNER JOIN 
         dbo.CustomerOrdersDtl AS CustomerOrdersDtl_1 ON CustomerOrders_1.ID = CustomerOrdersDtl_1.CustomerOrdersID INNER JOIN 
         dbo.ItemList AS ItemList_1 ON CustomerOrdersDtl_1.ItemID = ItemList_1.ID INNER JOIN 
         dbo.Shop AS Shop_1 ON CustomerOrders_1.ShopID = Shop_1.ID 
GROUP BY Shop_1.ShopName, CustomerOrdersDtl_1.ItemID, ItemList_1.ItemName, ItemList_1.Price) as sqry 
ORDER BY sqry.ShopName 
+0

'ORDER BY'項目引用'Shop_1',在這種情況下無效。它應該是'sqry.ShopName'(如果你想具體)或者只是'ShopName'(因爲子查詢是從中選擇的唯一表)。 – 2011-03-09 05:51:31

+0

你是對的。我修改了答案。 – 2011-03-09 05:55:17

+0

謝謝。你的建議按我想要的方式工作。有趣的是我爲什麼沒有想到這一點。大多數時候,簡單的答案確實是最好的。再次感謝! :) – 2011-03-09 06:12:28

0

也許嘗試:SUM(Itemlist_1.Price * CustomerOrdersDtl_1.Amount)AS TotalItemCost?

+0

謝謝您的建議。我一定會在另一份報告中使用它。對於這個特定的商品,我需要每個商店銷售的商品的數量。非常感謝您的信息。 :) – 2011-03-09 06:13:57

2

不能引用列別名tAmount。你必須再次完整地計算出你的計算結果。如果你要使用的列名tAmount,你必須使用子查詢:

這個例子破壞:

select 1 * 2 as tAmount, tAmount 

這個例子的工作原理:

select tbl.tAmount, tbl.tAmount * 2 from 
(select 1 * 2 as tAmount) as tbl 
+0

謝謝你的這一點代碼。它實際上回答了我們遇到的另一個問題。再次感謝。 :) – 2011-03-09 06:15:10

+0

太棒了,很高興聽到。隨時將我的答案標記爲「已接受」。 – 2011-03-09 12:59:14