如何使用子查询返回的数据?

时间:2011-03-09 04:47:49

标签: sql sql-server subquery

我有一个子查询,它只获取每个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。当我把(Itemlist_1.Price * tAmount)作为TotalItemCost时,我得到一个错误,说tAmount是一个无效的列。

甚至可以引用子查询返回的数据吗?还是有另一种方法可以做到这一点吗?

非常感谢您提供任何帮助。 :)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您不能在同一查询的范围内引用列别名tAmount。您必须再次完整地拼出计算结果。如果要使用列名tAmount,则必须使用子查询:

此示例中断:

select 1 * 2 as tAmount, tAmount

此示例有效:

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

答案 2 :(得分:0)

也许可以尝试:SUM(Itemlist_1.Price * CustomerOrdersDtl_1.Amount)AS TotalItemCost?