Oracle SQL我应该如何编写以下语句

时间:2013-12-22 13:59:28

标签: sql oracle

我有以下逻辑陈述:

[only if table2_column1= '1'] 
then:
  If
    table1_column='auto'
  Then
    If
      table2_column2='1'  
    Then
      If
        table2_column3='1' 
      Then
        RESULT A
      Else
       RESULT B
    Else
      If
        table2_column2='1'
    Then
      RESULT C
    Else
      RESULT D
  Else
    RESULT E

如何在Oracle SQL中表达这一点? (其他情况??)

3 个答案:

答案 0 :(得分:0)

我认为case逻辑最能表达如下:

select (case when t2.column1 = '1' and t.column = 'auto' and t2.column2 = '1' and t2.column3 = '1'
     then A
         when t2.column1 = '1' and t.column = 'auto' and t2.column2 = '1' 
         then B
         when t2.column1 = '1' and t.column = 'auto'
         then D
         when t2.column1 = '1'
         then E
 end) as Result

注意:没有C,因为条件对于B的条件是多余的。我假设table_. . .实际上是指来自Table2的列,而不是表中的一个奇怪的列名。

注意: case语句按顺序处理,因此第一个匹配是返回的。这使它具有与一堆if / then / else语句相同的功能,但通常具有一些易于理解的结构。

答案 1 :(得分:0)

这是你写的代码。有点凌乱的巢!我相信你只需要一个骨架。希望我能帮助你! 使用DECODECASE WHEN

的两种可能性
 DECODE(table2_column1,
        '1',DECODE(table1_column,
                   'auto',DECODE(table2_column2,
                                 '1',DECODE(table2_column3,
                                            '1','A'
                                            'B'),
                                 DECODE(table2_column2,
                                        '1','C'
                                        'C')
                               ),
                   'E'),
       NULL)



CASE WHEN table2_column1 = '1' Then
     CASE WHEN table1_column = 'auto' THEN
               CASE WHEN table2_column2 = '1' THEN
                         CASE WHEN table2_column3 = '1' THEN
                              'A'
                              Else
                              'B'
                         END
                    ELSE
                         CASE WHEN table2_column2 = '1' THEN
                              'C'
                              Else
                              'D'
                         END
                    END
               END
          ELSE
               'E'
     END
     ELSE
          NULL
 END

答案 2 :(得分:0)

CASE WHEN table2.column1 <> '1'    OR table2.column1 IS NULL THEN NULL
     WHEN table1.column  <> 'auto' OR table1.column  IS NULL THEN 'E'
     WHEN table2.column2 = '1'    AND table2.column3 = '1'   THEN 'A'
     WHEN table2.column2 = '1'                               THEN 'B'
     WHEN table2.column2 = '1'                               THEN 'C'
                                                             ELSE 'D'
     END

可以简化为:

CASE WHEN table2.column1 <> '1'    OR table2.column1 IS NULL THEN NULL
     WHEN table1.column  <> 'auto' OR table1.column  IS NULL THEN 'E'
     WHEN table2.column2 = '1'    AND table2.column3 = '1'   THEN 'A'
     WHEN table2.column2 = '1'                               THEN 'B'
                                                             ELSE 'D'
     END

(因为永远无法到达C。)