【问题标题】:CASE clause statement in DB2DB2 中的 CASE 子句语句
【发布时间】:2021-01-27 03:25:07
【问题描述】:

我有一张桌子 PROCESS 。目前它没有任何记录。如果表没有任何记录,我需要返回一个硬编码行。 当主键列“id”为空时,我正在做一个选择,然后我硬编码这些值并将其返回如下

SELECT CASE WHEN p.ID IS NULL THEN 1 ELSE p.ID END ,
CASE WHEN p.COMPANY IS NULL THEN 'COMP1' ELSE p.COMPANY END
FROM PROCESS p

我参考了以下链接 If-else statement in DB2/400

但它总是在 DB2 数据库中返回一个空行,而不是在 select 语句中使用的硬编码值。 08:50:27 SUCCESS SELECT 0.307 0.301 0 获取空结果集 08:50:29 已完成 0.307 0.301 0 成功:1 失败:0

请帮帮我

【问题讨论】:

  • 我们是否理解正确,如果表中没有行,您想返回表中的所有记录或仅返回一个人工行?
  • @Mark Ba​​rinstein:如果表中没有行,我需要检索一个人工行(硬编码)。
  • 问题也是关于,如果表中有行,你想返回什么。所有行?满足某些(哪一个?)条件的行数?

标签: db2 case


【解决方案1】:

没有办法这样做,因为主键永远不能为空。并从空表中选择 * 不返回任何行(0 行)它不返回 null。

你可以这样做:

select ID, COMPANY from PROCESS
UNION ALL
select 1 as ID, 'COMP1' as COMPANY from sysibm.sysdummy1 where (select count(*) from PROCESS) = 0;

【讨论】:

    【解决方案2】:

    有多种方法可以实现(我认为)你想要的。这是一个

    SELECT
        COALESCE(ID,1) AS ID
    ,   COALESCE(COMPANY,'COMP1') AS COMPANY
    FROM
        TABLE(VALUES 1) AS DUMMY(D)
    LEFT JOIN
        PROCESS
    ON
        1=1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多