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 Barinstein:如果表中没有行,我需要检索一个人工行(硬编码)。 问题也是关于,如果表中有行,你想返回什么。所有行?满足某些(哪一个?)条件的行数? 【参考方案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 语句包含空值