1

我正在使用 db2 数据库。我需要一个case语句,它将每行“-1”转换为“N/A”。其余行必须格式化为百分比。我的查询如下:

 SELECT
 case when sopm.TARGET_VALUE = '-1000'
        then   'N/A'
        ELSE sopm.TARGET_VALUE
        END as TARGET_VALUE
 FROM SUMMARY_PERFORMANCE_METRIC sopm

数据如下

3.5000  
 0.8000  
 0.8500  
 0.8000  
 0.2000  
 0.0500  
 -1.0000  
 -1.0000  
 0.9500  
 0.9000  
 0.4000  
 -1.0000

上面的脚本不会产生错误,但也没有给我正确的结果。

所需的输出:

3.5
 80%
 85%
 80%
 20%
 5%
 N/A
 N/A
 95%
 90%
 40%
 N/A
4

2 回答 2

3

我没有尝试过这段代码,但这样的东西应该可以工作:

SELECT
case when CONVERT(FLOAT, sopm.TARGET_VALUE),  <= '-1'
    then   'N/A'
    ELSE CONVERT(VARCHAR(10),CONVERT(INT, sopm.TARGET_VALUE * 100)) + '%'
    END as TARGET_VALUE
FROM SUMMARY_PERFORMANCE_METRIC sopm

或者如果您想要百分比中的小数位,则像这样:

SELECT
case WHEN sopm.TARGET_VALUE  <= -1
    THEN   'N/A'
WHEN sopm.TARGET_VALUE  >= 1
THEN sopm.TARGET_VALUE
    ELSE CONVERT(VARCHAR(10),CONVERT(NUMERIC(18,2), sopm.TARGET_VALUE * 100)) + '%'
    END as TARGET_VALUE
FROM SUMMARY_PERFORMANCE_METRIC sopm

我知道您可能已经完成了此操作,但我刚刚编辑了答案的第二个示例,以展示它如何处理 3.5。

于 2013-11-08T17:33:26.320 回答
1

试一试,它会在案例中为您添加百分比符号以及格式化您的百分比。

SELECT  CASE
            WHEN spom.TARGET_VALUE LIKE('-1.%') THEN 'N/A'
            ELSE STR(CONVERT(VARCHAR, CONVERT(DECIMAL(18,2), spom.TARGET_VALUE) * 100), 2, 0) + '%'
        END AS TARGET_VALUE
FROM    SUMMARY_PERFORMANCE_METRIC spom

使用这个和一些数据作为测试给了我这个结果......

TARGET_VALUE
N/A
40%
90%
于 2013-11-08T21:19:31.713 回答