2014-03-31 100 views
0

我在这里遇到了一些麻烦。我不是在SQL Server中非常流畅,我有这样的代码SQL字符串的WHERE子句中:SQL Server中的CASE语句

[Get_Next_Status] = 'Closed' AND 
(([Status] = 'No Error' AND [LiveAndPended] = 'Live' 
AND [Audit Date] Between @StDate And @EnDate) 
OR (([Status] = 'No Error' AND [LiveAndPended] = 'Pended' 
AND CASE WHEN CP_DedicatedReleaserDate IS NULL THEN (
[Audit Date] Between @StDate And @EnDate) 
ELSE (CP_DedicatedReleaserDate Between @StDate And @EnDate) END) 
OR ([Status] IN ('Financial','Processing') 
AND CP_DedicatedReleaserDate Between @StDate And @EnDate)) 

它似乎并不喜欢CASE语句。有人可以帮我纠正它吗?

+2

格式的代码的人!它遍布地图。 –

+2

'case'不能像这样工作。您无法在“案件”中切换条件 –

+0

发布您的*完整*查询,请格式化 –

回答

2

在SQL Server中,条件不能是case的结果。在这种情况下,你不需要case可言,coalesce()将正常工作:

WHERE Get_Next_Status = 'Closed' AND 
     (([Status] = 'No Error' AND [LiveAndPended] = 'Live' AND 
     [Audit Date] Between @StDate And @EnDate 
     ) OR 
     ([Status] = 'No Error' AND [LiveAndPended] = 'Pended' AND 
     COALESCE(CP_DedicatedReleaserDate, [Audit Date]) Between @StDate And @EnDate 
     ) OR 
     ([Status] IN ('Financial','Processing') AND 
     CP_DedicatedReleaserDate Between @StDate And @EnDate) 
    )