SQL Server - 在Join的Where部分使用Case

时间:2016-08-04 15:30:02

标签: sql sql-server

我尝试在联接中使用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。

1 个答案:

答案 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。