0

我有以下 sql 查询,用于创建报告以显示产品的修订历史记录。初始记录是修订版 0,如果编辑了某些内容,它将成为修订版 1,依此类推。而不是在报告中显示“0”,我更愿意显示“-”,有没有办法可以实现?

SELECT
product_id,
name,
description,
revision,
revision,reason,
'DETAILS' "VIEW DETAILS"
FROM product_table
WHERE product_id = :P2_product_id
ORDER BY REVISION DESC
--order by case when Revision is null then 1 else 0 end, revision desc

product_id - 数字
名称 - varchar2
描述 - varchar2
修订 - 数字
revision_reason - varchar2

我确实尝试了被注释掉的行,但是报告继续显示 0 而不是 -。

4

3 回答 3

1

你所追求的是解码功能。

解决方案

SELECT
product_id,
name,
description,
decode(revision,0,'-',revision)revision,
revision_reason,
'DETAILS' "VIEW DETAILS"
FROM product_table
WHERE product_id = :P2_product_id
ORDER BY REVISION DESC
--order by case when Revision is null then 1 else 0 end, revision desc

解释

将列替换revision,decode(revision,0,'-',revision)revision,。确保您阅读了 decode的工作原理——它非常有用。

笔记

您的 SQL Select 查询包括以下内容:revision,reason,。从查看您的列定义来看,我认为您的意思是revision_reason,。我相应地更新了我的解决方案。

于 2013-03-17T00:26:52.563 回答
1

我知道这个问题有点老并且已经回答了,但是我今天遇到了同样的问题,使用DECODEfor 显示连字符而不是 0 会导致列类型切换到STRING,这会阻止多位数字的正确排序。

因此,这是一种将列保持为的替代方法NUMBER

CASE WHEN column = 0 THEN NULL ELSE column END AS column
于 2013-05-22T05:20:31.370 回答
0

您还可以使用nullif(revision,'-')和使用“将空值显示为”属性。

于 2016-07-25T22:57:46.413 回答