繁体   English   中英

我们可以在SQL Server中使用'as'作为变量吗

[英]Can we use 'as' in SQL Server as a variable

SELECT  
    LineId, [LineNumber],
    ROUND(SUM(Quantity), 3) AS TotalNeed,
    SPMS2.dbo.ReturnTotalMRCByLineId(LineId) AS TotalMRC,
    SPMS2.dbo.ReturnTotalMIVByLineId(LineId) AS TotalMIV,
    SPMS2.dbo.ReturnTotalIMIVByLineId(LineId) AS TotalIMIV,
    (TotalMRC-TotalMIV ) AS Shortage
FROM 
    [SPMS2].[dbo].[ViewMTO]
GROUP BY 
    lineid, [LineNumber]

但我得到这些错误:

消息207,级别16,状态1,过程LineMaterialStatus,行10
无效的列名“ TotalMRC”。

消息207,级别16,状态1,过程LineMaterialStatus,行10
无效的列名“ TotalMIV”。

我的问题是我们可以使用“ as”作为变量在SQL Server中保存值吗?

解决此问题的正常方法是使用CTE或子查询。

我想指出,SQL Server还有一种替代方法, outer apply

  SELECT mto.LineId, mto.[LineNumber], round(sum(mto.Quantity), 3) as TotalNeed
         v.*, (v.TotalMRC - v.TotalMIV ) as Shortage
  FROM [SPMS2].[dbo].[ViewMTO] mto OUTER APPLY
       (VALUES (SPMS2.dbo.ReturnTotalMRCByLineId(mto.LineId),
                SPMS2.dbo.ReturnTotalMIVByLineId(mto.LineId),
                SPMS2.dbo.ReturnTotalIMIVByLineId(mto.LineId)
               )
       ) v(TotalMRC, TotalMIV, TotalIMIV)
  GROUP BY mto.lineid, mto.[LineNumber];

只需使用子查询即可实现:

SELECT  LineId,
        [LineNumber],
        TotalNeed,
        TotalMRC,
        TotalMIV,
        TotalIMIV,
        (TotalMRC - TotalMIV) as Shortage
  FROM  (
        SELECT  LineId,[LineNumber],
                round(sum(Quantity),3) as TotalNeed
                ,SPMS2.dbo.ReturnTotalMRCByLineId(LineId) as TotalMRC
                ,SPMS2.dbo.ReturnTotalMIVByLineId(LineId) as TotalMIV
                ,SPMS2.dbo.ReturnTotalIMIVByLineId(LineId)  as TotalIMIV
          FROM  [SPMS2].[dbo].[ViewMTO]
          GROUP BY lineid,[LineNumber]
        ) a

您可以从第一条语句中选择输出作为第二条语句的源子查询,从而可以使用创建的计算列。

然后,您只需将(TotalMRC - TotalMIV) as Shortage到外部查询,该外部查询(TotalMRC - TotalMIV) as Shortage提供计算所得的列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM