簡體   English   中英

where子句中case語句的返回條件

[英]Return Condition from case statement in where clause

通過搜索多個SO線程,我無法編寫查詢以在where子句中返回適當的條件。 例如,我有列Col1,它是int而變量var1作為varchar現在我在下面的查詢中使用了它,但是它不起作用。

Where CASE WHEN var1 = '1' THEN (Col1 = 1)  
WHEN var1 = '2' THEN (Col1 = 2)  
ELSE AND (1= 1) 
END

它給我syntax error near '='

編輯:

如果我想要類似的情況怎么辦

Col1 IN(條件...)

我認為應該是這樣。

Where Col1 = CASE WHEN var1 IN ('1','2') THEN var1 ELSE Col1 END

要么

Where Col1 = CASE  var1 WHEN  '1' THEN 1
                        WHEN  '2' THEN 2
             ELSE Col1 END ...

附帶說明一下,如果Col1 is nullable並且need to select它們,則使用;

Where Col1 is null OR 
             Col1 = CASE  var1 WHEN  '1' THEN 1
                        WHEN  '2' THEN 2
             ELSE Col1 END ...

CASE是一個返回值的表達式。 它不是用於像IF這樣的流邏輯的控制(盡管類似的關鍵字在某些語言(如VB)中確實可以那樣工作)。 嘗試:

WHERE Col1 = CASE 
  WHEN var1 = '1' THEN 1
  WHEN var1 = '2' THEN 2 
  ELSE Col1
END

除非 Col1可為NULL, 否則這將按照您嘗試的代碼中的預期工作。 一種解決方法是不可顯示在數據中的不可思議的值:

WHERE COALESCE(Col1, -1) = CASE
  ...
ELSE COALESCE(Col1, -1) END

您需要將該列放在案例之外:

where Col1 = case when var1 = '1' then 1
                  when var1 = '2' then 2
             end
      OR (var1 != '1' AND var1 != '2')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM