【问题标题】:How to do case when expression in select?选择表达式时如何做大小写?
【发布时间】:2019-06-17 08:01:27
【问题描述】:

我尝试使用 case when 表达式执行 select 语句。
我收到一个错误

无效的sql语句

这是针对 Oracle SQL 的:

SELECT DATUM_EINDE AANPAK,
       CASE WHEN DATUM_EINDE_AANPAK IS NULL THEN DATUM_EINDE_AANPAK
       ELSE MAX(DATUM_EINDE_AANPAK)
       END AS DATUM_EINDE_AANPAK
FROM T_CJIB_CVE;

【问题讨论】:

标签: sql oracle case-when


【解决方案1】:

如果我理解正确的话,我猜这就是你要找的;对于 ID = 2,数据为空,因此 - 从整个表中取最大的数据。

SQL> with t_cjib_cve (id, datum_einde_aanpak) as
  2    (select 1, date '2019-06-17' from dual union all
  3     select 2, null              from dual union all
  4     select 3, date '2019-01-01' from dual
  5    )
  6  select datum_einde_aanpak,
  7         case when datum_einde_aanpak is null then
  8                     (select max(datum_einde_aanpak) from t_cjib_cve)
  9              else datum_einde_aanpak
 10         end result
 11  from t_cjib_cve;

DATUM_EIND RESULT
---------- ----------
2019-06-17 2019-06-17
           2019-06-17
2019-01-01 2019-01-01

SQL>

【讨论】:

    【解决方案2】:

    像下面这样使用最大值

    SELECT DATUM_EINDE, AANPAK,
           max(CASE WHEN DATUM_EINDE_AANPAK IS NULL THEN DATUM_EINDE_AANPAK
           ELSE DATUM_EINDE_AANPAK END)
            AS DATUM_EINDE_AANPAK
    FROM T_CJIB_CVE group by DATUM_EINDE, AANPAK
    

    【讨论】:

      【解决方案3】:

      使用 CASE 和子查询来检索最大日期

      SELECT CASE WHEN datum_einde_aanpak IS NULL THEN null
        ELSE (SELECT MAX(datum_einde_aanpak) as max_date FROM t_cjib_cve) 
        END as datum_einde_aanpak
      FROM t_cjib_cve a
      

      【讨论】:

        猜你喜欢
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多