Sql server ';靠近'的语法不正确;总和'';在这个SP中?
当我尝试在Visual Studio中执行此MS SQL Server存储过程(从服务器资源管理器中创建后)时,我会得到“Msg 102,级别15,状态1,过程duckbilledPlatypi,第21行”“SUM”“附近的语法不正确”: 问题是:Sql server ';靠近'的语法不正确;总和'';在这个SP中?,sql-server,stored-procedures,sum,Sql Server,Stored Procedures,Sum,当我尝试在Visual Studio中执行此MS SQL Server存储过程(从服务器资源管理器中创建后)时,我会得到“Msg 102,级别15,状态1,过程duckbilledPlatypi,第21行”“SUM”“附近的语法不正确”: 问题是: SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) - 在上下文中,整个语句部分是: SUM(CASE WHEN In
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) -
在上下文中,整个语句部分是:
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) PriceVariance,
?
我想也许我需要把这句话用另一对括号括起来,就像这样:
*(SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END)) PriceVariance,*
…但我还是得到了同样的错误信息
更新
下面(霍尼獾的回答):
我得到了以下指点:
Msg 164,15级,状态1,程序变量PriceByProductWithPriceChangePercentage,第30行
每个GROUP BY表达式必须至少包含一个非外部引用的列。
Msg 207,第16级,状态1,程序变量PriceByProductWithPriceChangePercentage,第16行
无效的列名“用法”。
Msg 207,16级,状态1,程序变量PriceByProductWithPriceChangePercentage,第17行
无效的列名“用法”。
Msg 207,16级,状态1,程序变量PriceByProductWithPriceChangePercentage,第20行
无效的列名“用法”。
Msg 207,16级,状态1,程序变量PriceByProductWithPriceChangePercentage,第21行
无效的列名“用法”。
Msg 207,16级,状态1,程序变量PriceByProductWithPriceChangePercentage,第23行
列名“用法”无效。输入错误:
SUM(CASE [..snip...][ END) UsageVariance
^--missing comma
这就是为什么在下一行的SUM
上出现语法错误的原因。您基本上有SUM(…)SUM(…)
,这是无效的。打字错误:
SUM(CASE [..snip...][ END) UsageVariance
^--missing comma
这就是为什么在下一行的
SUM
上出现语法错误的原因。基本上您有SUM(…)SUM(…)
,这是无效的。正如我在评论中所说,您应该添加一个分组。其他人指出您缺少一个逗号,我还补充说:
Select Description,
@BegDate BegDate,
@Week1End Week1End,
@Week1End Week2Begin,
@EndDate EndDate,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Usage ELSE 0 END) Week1Usage,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) Week2Usage,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) Week1Price,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Usage ELSE 0 END) UsageVariance,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) PriceVariance,
(SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) )
/ SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) PercentageOfPriceVariance
From InvoiceDetail Ind
Where Ind.Unit = @Unit
AND Ind.InvoiceDate BETWEEN @BegDate AND @EndDate
Group By Description
编辑:显然分组依据
中的变量是错误的正如我在评论中所说,您应该添加一个分组依据
。其他人指出您缺少一个逗号,我还补充说:
Select Description,
@BegDate BegDate,
@Week1End Week1End,
@Week1End Week2Begin,
@EndDate EndDate,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Usage ELSE 0 END) Week1Usage,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) Week2Usage,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) Week1Price,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Usage ELSE 0 END) UsageVariance,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) PriceVariance,
(SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Usage ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) )
/ SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) PercentageOfPriceVariance
From InvoiceDetail Ind
Where Ind.Unit = @Unit
AND Ind.InvoiceDate BETWEEN @BegDate AND @EndDate
Group By Description
编辑:显然,group by
中的变量是错误的添加一个group by
子句,在何处,使用什么值(按什么分组)?并且在USAGEVERANCE
之后缺少一个逗号(问题不在于报告的行,而在于它上面的行)常规GROUP BY规则说:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识分组列或是集合函数的参数。缺少逗号是我喜欢以逗号开始新行的原因,而不是在前一行的末尾使用逗号。当它们都在一列中时,很容易发现。添加一个group by
子句WHERE,使用什么值(按什么分组)?并且USAGEVERANCE
后缺少一个逗号(问题不在于报告的行,而在于它上面的行)。常规group by规则说:如果指定了group by子句,选择列表中的每个列引用必须标识分组列或是集合函数的参数。缺少逗号是我喜欢用逗号开始新行的原因,而不是在前一行的末尾使用逗号。当它们都在一列中时很容易发现。但是“@Ind.InvoiceDate”中的“@”应该被删除,对吗?所以它只是“Ind.InvoiceDate”?谢谢;我已经为我的问题添加了一个更新。@B.ClayShannon,更新的答案,变量不应该在组中,但是“@Ind.InvoiceDate”中的“@”应该被删除,对吗?所以它只是“Ind.InvoiceDate”?谢谢;我已经为我的问题添加了更新。@B.ClayShannon,更新的答案,变量不应该在组中。