2016-04-28 113 views
2

我想選擇,使得如果@reporteetype'immediate'那麼我想選擇行,其中水平等於 1,否則其中水平比 2.SQL:根據大小寫條件大於或等於where子句?

select a, b, c, level 
from table1 
where col1 ='x' and        
     CASE @reporteetype WHEN 'immediate' THEN level = '2' 
         WHEN 'other' THEN level > 2 
         else 1 = 1 
     END 

更大這是一個簡化的版本我的場景。我不想使用動態查詢。我想知道這是否可以用案例來完成?

+0

使用'AND' /'OR'來代替'case'表達式。 – jarlh

回答

7

可以使用的AND組合和OR條件做到這一點:

SELECT 
    a, b, c, level 
FROM table1 
WHERE 
    col1 = 'x' 
    AND (
     (@reporteetype = 'immediate' AND level = 2) 
     OR (@reporteetype = 'other' AND level > 2) 
    ) 

補充閱讀:但是如果你想通過@Felix Pamittan建議

Catch-all Queries by Gail Shaw

+0

你是男人! – Arbaaz

+1

永遠記住要像Felix那樣將OR語句包含在圓括號中,如果你不這樣做,可能會引起混淆。 –

+0

我會記住這一點。謝謝! – Arbaaz

1

答案是更有效,使用CASE Expression,那麼它可能會有幫助:

SELECT a 
     , b 
     , c 
     , level 
FROM table1 
WHERE col1 = 'x' 
     AND ((CASE WHEN @reporteetype = 'immediate' THEN '2' 
       END) = level 
       OR (CASE WHEN @reporteetype = 'other' THEN '2' 
        END) > level 
      )