Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我们可以使用SQL Server中的“as”作为变量吗_Sql Server - Fatal编程技术网

Sql server 我们可以使用SQL Server中的“as”作为变量吗

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

但我有以下错误:

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 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];