2011-03-09 6 views
0

itemID 당 판매되는 품목 수의 합계를 얻는 하위 쿼리가 있습니다. 그 하위 쿼리의 결과를 얻고 아이템 가격으로 곱하고 싶습니다. 그러나 하위 쿼리에 사용한 열 별칭을 참조하려고하면 Slq Server에서 사용하려고하는 열이 잘못되었음을 알리는 오류가 발생합니다. 여기에 내 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 다음에 Price * tAmount라는 다른 열이 있습니다. TotalItemCost로 (Itemlist_1.Price * tAmount)를 넣으면 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'이어야합니다 (하위 쿼리가 유일하게 선택된 테이블이기 때문에). –

+0

맞습니다. 나는 대답을 수정했다. –

+0

감사합니다. 귀하의 제안은 내가 원하는 방식대로 작동했습니다. 재미있는 이유는 내가 그걸 생각하지 않았어. 대부분의 경우 간단한 대답이 가장 좋습니다. 다시 한 번 감사드립니다! :) –

0

어쩌면 시도 : SUM (Itemlist_1.Price * CustomerOrdersDtl_1.Amount) AS TotalItemCost?

+0

감사합니다. 나는 이것을 다른 보고서에서 확실히 사용할 것이다. 이 특별한 경우에는 상점 당 판매되는 품목 수가 필요합니다. 정보를 주셔서 대단히 감사합니다. :) –

2

당신은 참조 할 수 없습니다 열 별칭 tAmount :

그렇지 않으면 하위 선택을 사용해보십시오. 가지고 계신대로 계산을 다시 철자해야합니다. 당신이 열 이름 tAmount을 사용하려면 하위 쿼리를 사용할 수 있습니다

이 예제는 나누기 :

select 1 * 2 as tAmount, tAmount 

이 예제는 작동 : 귀하의 제안에 대한

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

이 코드를 이용해 주셔서 감사합니다. 실제로 우리가 가진 또 다른 문제에 대답했습니다. 다시 한번 감사드립니다. :) –

+0

위대하고 듣기 좋습니다. 내 대답을 "수락 됨"으로 표시하십시오. –

관련 문제