在SQL查询中计算值,并在同一查询中的其他计算中使用这些值

时间:2020-09-21 19:27:28

标签: sql sql-server sum subquery

我有一个用于存储库存的表,当显示库存时,我想进行一些计算,并运行一个子查询,该子查询返回一个将在某些计算中使用的值。

我的出发点是:

SELECT [lineID]
      ,[SKUNumber]
      ,[ContainerNumber]
      ,[UnitsEaches]
      ,ISNULL((select Sum(QTY) from AllocatedInventory
               Where AllocatedInventory.SKUNumber = Inventory.SKUNumber),0) as 'Allocated'
      ,[Bay]
      ,[Level]
      ,[Position]
      ,[VCP]
      ,[UnitWeight]
      ,[Comments]
      ,[DateReceived]
FROM [dbo].[Inventory]

我要做的第一件事是从UnitsEaches中减去子查询返回的分配数量,以计算AvailableInventory。当我尝试使用“分配的”添加SUM函数时,出现一条错误消息,提示“分配的是无效列”。

排序后,我需要通过将AvailableInventory除以VCP来计算主纸箱。

1 个答案:

答案 0 :(得分:0)

您不能在定义别名的相同范围内引用别名。在这里,似乎横向联接是最简单的解决方案:

SELECT i.[lineID]
      ,i.[SKUNumber]
      ,[ContainerNumber]
      ,i.[UnitsEaches]
      ,ai.Allocated
      ,i.[UnitsEaches] - ai.Allocated as AvailableInventory
      ,i.[Bay]
      ,i.[Level]
      ,i.[Position]
      ,i.[VCP]
      ,i.[UnitWeight]
      ,i.[Comments]
      ,[DateReceived]
FROM [dbo].[Inventory]
OUTER APPLY (
    SELECT COALESCE(SUM(ai.QTY), 0) allocated
    FROM AllocatedInventory ai
    WHERE ai.SKUNumber = i.SKUNumber
) ai