Sql server 我们可以使用SQL Server中的“as”作为变量吗
但我有以下错误: Msg 207,16级,状态1,程序LineMaterialStatus,第10行 无效的列名“TotalMRC” Msg 207,16级,状态1,程序LineMaterialStatus,第10行 列名称“TotalMIV”无效Sql server 我们可以使用SQL Server中的“as”作为变量吗,sql-server,Sql Server,但我有以下错误: Msg 207,16级,状态1,程序LineMaterialStatus,第10行 无效的列名“TotalMRC” Msg 207,16级,状态1,程序LineMaterialStatus,第10行 列名称“TotalMIV”无效 我的问题是,我们可以使用“as”作为变量来保存SQL Server中的值吗?只需使用子查询即可实现这一点: SELECT LineId, [LineNumber], ROUND(SUM(Quantity), 3) AS Total
我的问题是,我们可以使用“as”作为变量来保存SQL Server中的值吗?只需使用子查询即可实现这一点:
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]
可以选择第一条语句的输出作为第二条语句的源子查询,这样可以使用创建的计算列
然后,只需将TotalMRC-TotalMIV作为短缺移动到外部查询,该查询将具有可用的计算列。只需使用子查询即可实现此目的:
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]
可以选择第一条语句的输出作为第二条语句的源子查询,这样可以使用创建的计算列
然后,您只需将TotalMRC-TotalMIV作为短缺移动到外部查询,该查询将具有可用的计算列。此问题的正常解决方案是使用CTE或子查询 我想指出,SQL Server还有一种替代方法,即外部应用:
这个问题的正常解决方案是使用CTE或子查询 我想指出,SQL Server还有一种替代方法,即外部应用:
那么,您的解决方案或@parkin解决方案中哪一个更快?无需对此进行详细说明。交叉将很好地工作,因为应用程序保证在mto中每行返回1行。@EhsanAkbar RE:哪一个更快,如果您试图优化它,那么丢弃标量UDF可能是最好的选择。那么您的解决方案或@parkin解决方案中哪一个更快?无需对此进行说明。CROSS可以很好地工作,因为apply保证在mto中每行返回1行。@EhsanAkbar RE:速度更快,如果您试图优化它,那么放弃标量UDF可能是最好的选择。
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];