我正在使用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
答案 0 :(得分: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。
答案 1 :(得分: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%