2017-09-02 73 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