2017-04-23 70 views
1

假设我有一个名为ABC表:是否可以在Oracle SQL查询中退出一个案例?

Col Val 
a 1 
b 3 
c 2 
a 3 
b 6 
c 7 
a 5 
b 9 
c 9 
a 7 
b 2 
c 8 

SELECT MAX(CASE 
WHEN COL = 'a' 
THEN VAL 
(exit_command_if_there_s_any) 
WHEN COL = 'b' 
THEN VAL*3 
ELSE 
VAL*4 
END) AS "MAX_VAL" 
FROM ABC; 

基本上我想是这样的查询返回COL的最大值=“A”,如果它在表中存在其他应返回其他COL的最大。 但是如果COL ='a'在那里,它不应该检查COL中的其他值并且应该简单地退出CASE。

+0

的'* 3'的是什么? –

回答

1

这正是你问什么 -
单个最大值,与优先级为ab然后再乘以相应的值(无/ 3/4)。

select coalesce 
     (
      max(case when COL = 'a' then val end) 
      ,max(case when COL = 'b' then val end) * 3 
      ,max(val) * 4 

     ) as "MAX_VAL" 

from ABC 

+---------+ 
| MAX_VAL | 
+---------+ 
|  7 | 
+---------+ 
+0

谢谢Dudu。有效! –

+0

太好了:-)请不要忘记接受答案(左边的'V'号) –

+0

亲切的提醒接受答案 –

0

如果你想要的最大值,那么不要以为case。相反:

SELECT abc.* 
FROM ABC 
ORDER BY (CASE WHEN COL = 'A' THEN 1 ELSE 2 END), 
     VAL DESC; 

或者,把这两个值在同一列:

select max(case when col = 'A' then val end) as max_a, 
     max(case when col = 'B' then 3 * val end) as max_3b 
from abc; 
相关问题