2017-09-02 71 views
0

我可以在選擇情況下使用If else嗎?如果選擇案例?

Update Tab 
set Quantity2 = a.Quantity 
from 
(
    select 
    case when D.Quantity1 > Tab.Quantity2 
    then D.Quantity1 ------------> (if and else here) 
    else Tab.Quantity3 
    end 
    as Quantity 
    from Dab D 
    inner join Tab 
    on 
    D.ID = Tab.ID 
)a 

我想在SELECT CASE WHEN部分有一個IF ELSE塊。可能嗎?或者還有其他方法嗎?

+1

標籤您的RDBMS(如Oracle,MS SQL服務器,MSACCESS,等等)。 – Igor

+0

完成。它的SQL服務器 – Wocugon

+0

是的嵌套也很好,我只需要做什麼是WHEN(cond1)THEN(VALUE1)...但是,當(cond2)然後(執行另一個比較) – Wocugon

回答

1

可以嵌套情況下,當語句。

只需將內部比較放入then部分外部語句中的新case when語句中即可。

select 
Table2.id, 
case when Table2.switch=1 
then 
(
    case when Table1.val1>Table1.val3 
    then Table1.val1 
    else Table1.val3 
    end 
) 
else 
(
case when Table1.val2>Table1.val3 
then Table1.val2 
    else Table1.val3 
end 
) 
end out 
from Table2 
inner join Table1 on Table2.id=Table1.id 

http://sqlfiddle.com/#!6/e0086/2

+0

請reword並把SQL放在這裏'只是,然後新的情況下,當時的聲明或其他.'沒有多大意義 –

+0

@MarkSchultheiss reworded,並粘貼的SQL副本。 – Taemyr

3

你的基本查詢應該看起來更像是這樣的:

Update Tab 
    set Quantity2 = D.Quantity1 
    from Dab D join 
     Tab 
     on D.ID = Tab.ID 
    where D.Quantity > Tab.Quantity2; 

您可以在set子句中添加case如果你想有一個條件表達式。

編輯:

如果要檢查多個條件,只是將它們添加到case

Update Tab 
    set Quantity2 = (case when D.Quantity > Tab.Quantity2 then D.Quantity1 
          when . . . then . . . 
          when . . . 
          else tab.Quantity2 
        end) 
    from Dab D join 
     Tab 
     on D.ID = Tab.ID; 
+0

謝謝戈登,但你的查詢而我現在正在做的查詢是基本檢查1條件。我有3個這樣的條件,並且在這些條件下我也有條件。對不起,如果它變得困惑 – Wocugon

+0

是的,我得到了那部分先生,這是我的問題的一半。 例如: (Cond1):when D.Quantity> Tab.Quantity2 then D.Quantity1 (Cond2):when D.Quantity Wocugon

+0

按字面意思,如果Quantity> Quantity2,則用D.Quanity1替換Quantity2,..........但如果Quantity Wocugon