我有以下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而不是 - 。
答案 0 :(得分: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,
。确保你read how
decode works - 它非常有用。
您的SQL Select查询包括:revision,reason,
。从看
在您的列定义中,我认为您的意思是revision_reason,
。一世
相应地更新了我的解决方案。
答案 1 :(得分:1)
我知道这个问题有点陈旧且已经回答了,但我今天遇到了同样的问题,使用DECODE
显示连字符而不是0会导致列类型切换为STRING
,这会阻止正确排序多位数字。
所以,这是一个将列保持为NUMBER
的替代方法:
CASE WHEN column = 0 THEN NULL ELSE column END AS column
答案 2 :(得分:0)
您也可以使用nullif(revision,'-')
并使用“将空值显示为”属性。