我尝试在联接中使用CASE
代码中的WHERE IN
子句。这是不可能的,还是我的语法不好?任何建议将不胜感激。感谢。
LEFT JOIN
MyTable ON MyTable.ID = SomeTable.ID
AND MyTable.ResultDate IN (CASE
WHEN metricid IN ('0040','0015')
THEN '('01312016','03312016','06302016')'
ELSE '('20160630')'
END)
我正在使用SQL Server 2014。
答案 0 :(得分:1)
你不能但你可以这样做:
LEFT JOIN
MyTable ON MyTable.ID = SomeTable.ID
AND ((metricid IN ('0040','0015') AND MyTable.ResultDate IN ('01312016','03312016','06302016')) OR ((metricid NOT IN ('0040','0015') AND MyTable.ResultDate='20160630')))
它很难看,但应该有效:)
Anoter方法是必须查询并执行UNION。因此,第一个按度量标准IN过滤(' 0040'' 0015')并根据ResultDate IN(' 01312016' &&)对MyTable进行LEFT JOIN #39; 03312016'' 06302016&#39)。而另一个按标量过滤而不是IN。