where子句中的case语句不起作用

时间:2014-10-10 20:15:51

标签: sql sql-server tsql

友..

我正在使用存储过程,其中有一个可选参数 @equal ,默认值为NULL。如果用户给参数赋值,则必须更改SQL查询。我试图在Where子句中使用Case。但它显示出一些错误。 帮助我正确的语法或更好的逻辑

我的要求是当用户没有为 @equal 提供价值时,然后是 FiscalYear< @yr
否则
FiscalYear< = @年

Select BankCode,(SUM(Debit)-SUM(Credit)) Amt
From vwDailyData 
Where Pname=@ParishName and FiscalYear< (CASE WHEN @equal IS NULL THEN @yr ELSE '='+@yr) 
and BankCode<>'Cash'
Group By BankCode

修改后的问题

Select BankCode,(SUM(Debit)-SUM(Credit)) Amt
From vwDailyData 
Where Pname=@ParishName AND (CASE WHEN @equal IS NULL THEN FiscalYear < @yr ELSE FiscalYear <= @yr END)
and BankCode<>'Cash'
Group By BankCode

错误陈述 消息102,级别15,状态1,过程spDisplayBankConsolidate,第14行 '&lt;'。

附近的语法不正确

1 个答案:

答案 0 :(得分:3)

您的情况有两处错误:

  • CASE表达式缺少END
  • 您无法在CASE表达式中提供其他运算符。

条件应如下所示:

WHERE Pname=@ParishName AND 
((@equal IS NULL AND FiscalYear < @yr) OR (@equal IS NOT NULL AND FiscalYear <= @yr))
AND BankCode<>'Cash'

请注意@equal IS NULL表达式的两个部分中的@equal IS NOT NULLOR条件。由于这两者是互斥的,因此只有OR的一侧将决定要在查询结果中包含哪些行。