Sql 在配置单元查询语言中将字符串列强制转换为3位数

Sql 在配置单元查询语言中将字符串列强制转换为3位数,sql,hiveql,impala,Sql,Hiveql,Impala,我有一个select语句如下 SELECT t5.Name AS ProductName , CAST (t5.salerevenue AS DECIMAL(20,3)) AS Revenue , CASE WHEN t5.PreviousRevenue <> 0 THEN CAST(t5.PresentRevenue/t5.PreviousRevenue*100 AS STRING) ELSE 'NA' END AS RevenueTrend C

我有一个select语句如下

SELECT t5.Name AS ProductName
, CAST (t5.salerevenue AS DECIMAL(20,3)) AS Revenue
, CASE WHEN t5.PreviousRevenue <> 0 THEN CAST(t5.PresentRevenue/t5.PreviousRevenue*100 AS STRING)
       ELSE 'NA' 
       END AS RevenueTrend  
CASE WHEN t5.PreviousRevenue <> 0 THEN CAST((CAST(t5.PresentRevenue/t5.PreviousRevenue*100) AS DECIMAL(20,3)) AS STRING)
     ELSE 'NA' 
     END AS RevenueTrend    
选择t5.Name作为产品名称
,将(t5.salerevenue作为十进制(20,3))转换为收入
,当t5.PreviousRevenue 0然后强制转换时的情况(t5.PreviousRevenue/t5.PreviousRevenue*100作为字符串)
否则“不”
以收入收尾
我想将收入表转换为最大3点小数(20.123) 我必须将其转换为字符串,因为
当未满足t5.0
时,我必须将其显示为“NA”

我试着这样做

SELECT t5.Name AS ProductName
, CAST (t5.salerevenue AS DECIMAL(20,3)) AS Revenue
, CASE WHEN t5.PreviousRevenue <> 0 THEN CAST(t5.PresentRevenue/t5.PreviousRevenue*100 AS STRING)
       ELSE 'NA' 
       END AS RevenueTrend  
CASE WHEN t5.PreviousRevenue <> 0 THEN CAST((CAST(t5.PresentRevenue/t5.PreviousRevenue*100) AS DECIMAL(20,3)) AS STRING)
     ELSE 'NA' 
     END AS RevenueTrend    
t5.PreviousRevenue 0然后将((将t5.PreviousRevenue/t5.PreviousRevenue*100转换为十进制(20,3))转换为字符串时的情况)
否则“不”
以收入收尾
但是我得到了一个语法错误。
收入部分按预期进行预测。我希望收入部分也像收入一样进行预测。有什么办法可以做到这一点吗?

尝试先将其转换为十进制,然后再转换为字符串:

SELECT . . .
       (CASE WHEN t5.PreviousRevenue <> 0
             THEN CAST(CAST(t5.PresentRevenue/t5.PreviousRevenue*100 AS DECIMAL(20,3)) as string)
              ELSE 'N/A'
        END) AS RevenueTrend  
选择。
(t5.0以前收入时的情况)
然后将其转换为字符串(将(t5.PresentRevenue/t5.PreviousRevenue*100转换为十进制(20,3))
其他“不适用”
结束)作为收入来源
我离得太近了:)。我会接受你的回答的