DB2 中的 CASE 子句语句

Posted

技术标签:

【中文标题】DB2 中的 CASE 子句语句【英文标题】:CASE clause statement in DB2 【发布时间】: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:如果表中没有行,我需要检索一个人工行(硬编码)。 问题也是关于,如果表中有行,你想返回什么。所有行?满足某些(哪一个?)条件的行数? 【参考方案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

【讨论】:

以上是关于DB2 中的 CASE 子句语句的主要内容,如果未能解决你的问题,请参考以下文章

用于返回结果集的 where 子句中的 case 语句包含空值

where 子句 oracle 中的 case 语句

where 子句中的 case 语句 - SQL Server

SQL:WHERE 子句中的 IF/CASE 语句

使用多 case 语句时分区顺序子句出错

具有另一个 sql 语句的 where 子句中的 case 条件