友..
我正在使用存储过程,其中有一个可选参数 @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;'。
附近的语法不正确答案 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 NULL
和OR
条件。由于这两者是互斥的,因此只有OR
的一侧将决定要在查询结果中包含哪些行。