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