Как я могу использовать данные, возвращенные из подзапроса? - PullRequest
0 голосов
/ 09 марта 2011

У меня есть подзапрос, который просто получает сумму количества проданных товаров за 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, который показывает цену * tAmount.Когда я помещаю (Itemlist_1.Price * tAmount) в качестве TotalItemCost, я получаю сообщение об ошибке, говорящее о том, что tAmount является недопустимым столбцом.

Можно ли даже ссылаться на данные, возвращенные подзапросом?Или есть другой способ сделать это?

Большое спасибо заранее за любую помощь.:)

Ответы [ 3 ]

2 голосов
/ 09 марта 2011

Столбец 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
2 голосов
/ 09 марта 2011

Нельзя ссылаться на псевдоним столбца tAmount в пределах одного и того же запроса.Вы должны изложить вычисления полностью снова, как у вас есть.Если вы хотите использовать имя столбца tAmount, вы должны использовать подзапросы:

В этом примере разрывы:

select 1 * 2 as tAmount, tAmount

В этом примере работает:

select tbl.tAmount, tbl.tAmount * 2 from 
( select 1 * 2 as tAmount ) as tbl
0 голосов
/ 09 марта 2011

возможно попробуйте: SUM (Itemlist_1.Price * CustomerOrdersDtl_1.Amount) AS TotalItemCost?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...