带有案例陈述的复合Where子句 [英] Compound Where clause with Case Statements
本文介绍了带有案例陈述的复合Where子句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图在存储过程的where子句中使用可选语句。 SQL Server不喜欢第一个Case语句,在右括号和等号处用红线表示。第二个和第三个Case语句中的红线也是字段的别名值。到目前为止的代码是......
I am trying to use optional statements in the where clause of a stored procedure. SQL Server does not like the first Case statement with red line at closing parenthesis and equal sign. Also red line in second and third Case statement at alias values for fields. The code so far is...
SELECT c.[Contract], f.Area, dc.DeliverableCategory, d.DueDate, d.DueDateAdjusted, d.CompletedDate, d.PercentComplete, d.Comments
FROM tblDeliverables d LEFT JOIN
CommonData.dbo.tblContracts c on c.ConID = d.Contract LEFT JOIN
tblFunctionalAreas f ON f.FunID = d.FunID LEFT JOIN
tblDeliverableCategories dc ON dc.DelCatID = d.DelCatID LEFT JOIN
tblEmployeesResponsible e ON e.DelCatID = d.DelCatID
WHERE d.DueDate >= @Start AND d.DueDate <= @End AND
CASE WHEN @ConID IS NOT NULL THEN (d.[Contract] = @ConID)
WHEN @FunID IS NOT NULL THEN (d.FunID = @FunID)
WHEN @EmpID IS NOT NULL THEN (e.EmpID = @EmpID) END
推荐答案
试试这个...
Hi,
Try this...
SELECT c.[Contract], f.Area, dc.DeliverableCategory, d.DueDate, d.DueDateAdjusted, d.CompletedDate, d.PercentComplete, d.Comments
FROM tblDeliverables d LEFT JOIN
CommonData.dbo.tblContracts c on c.ConID = d.Contract LEFT JOIN
tblFunctionalAreas f ON f.FunID = d.FunID LEFT JOIN
tblDeliverableCategories dc ON dc.DelCatID = d.DelCatID LEFT JOIN
tblEmployeesResponsible e ON e.DelCatID = d.DelCatID
WHERE d.DueDate >= @Start AND d.DueDate <= @End
AND d.[Contract] = CASE WHEN @ConID IS NOT NULL THEN @ConID ELSE d.[Contract] END
AND d.FunID = CASE WHEN @FunID IS NOT NULL THEN @FunID ELSE d.FunID END
AND e.EmpID = CASE WHEN @EmpID IS NOT NULL THEN @EmpID ELSE e.EmpID END
希望这会对你有所帮助。
干杯
Hope this will help you.
Cheers
这篇关于带有案例陈述的复合Where子句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文