是否可以在ORACLE SQL的CASE中使用SQL查询?

时间:2017-04-19 19:21:16

标签: sql oracle subquery case

例如:

SELECT CASE
   WHEN COL_1 LIKE '%4'
   THEN (SELECT MAX(COL_1) FROM TAB_1)
   ELSE MAX(COL_1)
   END AS "RESULT"
FROM TAB_1

2 个答案:

答案 0 :(得分:1)

是的,这很好。此上下文中的查询称为标量子查询。它需要返回一列(通常)和最多一行。

但这个特殊版本存在问题:

SELECT (CASE WHEN COL_1 LIKE '%4'
             THEN (SELECT MAX(COL_1) FROM TAB_1)
             ELSE MAX(COL_1)
        END) AS "RESULT"
FROM TAB_1

特别是,要使CASE WHEN生效,COL_1必须位于GROUP BY。然而,那么取最大值会很奇怪。

我怀疑你想要两列或两行:

SELECT MAX(CASE WHEN COL_1 LIKE '%4' THEN COL_1 END) as MAX_4 
       MAX(CASE WHEN COL_1 LIKE '%4' THEN NULL ELSE COL_1 END) as MAX_not4 
FROM Ttabl_1

答案 1 :(得分:0)

是的,可以这样做,这是

的一个例子

让我们假设以下两个表

表1:CITY(ID,NAME,COUNTRYCODE)

表2:国家(代码,名称,大陆,地区)

对于上表,您可以将查询用作

    select id,
           case when countrycode like 'AUS'
           then (select name from country where code like 'AUS')
           else countrycode end
    from city;