[英]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.