我有以下逻辑陈述:
[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中表达这一点? (其他情况??)
答案 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)
这是你写的代码。有点凌乱的巢!我相信你只需要一个骨架。希望我能帮助你!
使用DECODE
和CASE 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
。)