簡體   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