Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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 2012 where子句中的大小写给出SQL Server 2012中的语法错误_Sql Server 2012 - Fatal编程技术网

Sql server 2012 where子句中的大小写给出SQL Server 2012中的语法错误

Sql server 2012 where子句中的大小写给出SQL Server 2012中的语法错误,sql-server-2012,Sql Server 2012,我在报告端工作,当选择开始日期和结束日期时,报告应显示日期范围之间的数据,如果未选择日期,则报告应显示表中的所有记录 下面的SQL给出了1=1时的语法错误: select a.PURCH_DOC_DATE from PURCH_SCHED_LINE_FACT a where (case when a.CLIENT_ID='0050' then a.PURCH_DOC_DATE when a.CLIENT_ID='0057' then a.STATS_DELIV_DAT

我在报告端工作,当选择开始日期和结束日期时,报告应显示日期范围之间的数据,如果未选择日期,则报告应显示表中的所有记录

下面的SQL给出了1=1时的语法错误:

select  a.PURCH_DOC_DATE from PURCH_SCHED_LINE_FACT a 
 where  
 (case when a.CLIENT_ID='0050' then a.PURCH_DOC_DATE 
       when a.CLIENT_ID='0057' then a.STATS_DELIV_DATE
       else 1=1
end)
between  '01-01-2014' and '12.12.2014'

案例
不是这样工作的。试试看

select  a.PURCH_DOC_DATE from PURCH_SCHED_LINE_FACT a 
where (a.CLIENT_ID='0050' and a.PURCH_DOC_DATE between '2014-01-01' and '2014-12-12')
   or (a.CLIENT_ID='0057' and a.STATS_DELIV_DATE between '2014-01-01' and '2014-12-12')
   or a.CLIENT_ID not in ('0050','0057')

您能否提供更多有关所得到错误的信息?
CASE
是一个只返回一个数据类型优先级最高的值的表达式。您不能将其用于流量控制或直接转储到
ELSE 1=1
。。。我建议在混合使用
以及
时,使用括号分隔不同的相关谓词集。您可能很清楚运算符优先级在这里是如何工作的,但对于95%以上的读者来说可能不太清楚。。。