如何将 SQL 输出固定为两位小数
How to fix SQL output into two decimal places
我有这个SELECT声明:
SELECT
t.clmUnit,
t.clmConType,
Count(t.clmCaseID) TotalCases,
SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END) TotalResolved,
cast(SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END) as decimal(18,2))/cast(Count(t.clmCaseID) as decimal(18,2))*100 as [TotalResolved %],
SUM(CASE WHEN t.clmOutcomeType='Unresolved' THEN 1 ELSE 0 END) TotalCaseProgressed,
cast(SUM(CASE WHEN t.clmOutcomeType='Unresolved' THEN 1 ELSE 0 END) as decimal(18,2))/cast(Count(t.clmCaseID)as decimal(18,2))*100 as [TotalCaseProgressed %],
SUM(CASE WHEN t.clmOutcomeType='Work In Progress' THEN 1 ELSE 0 END) TotalFurtherConReq,
cast(SUM(CASE WHEN t.clmOutcomeType='Work In Progress' THEN 1 ELSE 0 END) as decimal(18,2))/cast(Count(t.clmCaseID)as decimal(18,2))*100 as [TotalFurtherConReq %]
将输出列显示为十进制数字(例如)62.24837411,我知道我可以将其放入 excel 并将该列格式化为百分比,但我的问题是如何获得 SQL 将其转换为百分比?我尝试将 as decimal(18,2) 更改为 as decimal (4,2) 这是我想要的,但它只是抛出数学溢出错误?
试试这个:
select convert(DECIMAL(10,2),column)
精确到小数点后两位
你把 cast
放错地方了
cast(SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END) as decimal(18,2))/cast(Count(t.clmCaseID) as decimal(18,2))*100 as [TotalResolved %],
为整个结果放置 CAST
,如下所示:
cast(SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END)/cast(Count(t.clmCaseID) as decimal(18,2))*100 as decimal(18,2)) as [TotalResolved %],
AS Arul 建议,您需要对整列计算使用强制转换函数。
SELECT
t.clmUnit,
t.clmConType,
Count(t.clmCaseID) TotalCases,
SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END) TotalResolved,
cast(SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END))/Count(t.clmCaseID) * 100 as decimal(18,2)) as [TotalResolved %],
SUM(CASE WHEN t.clmOutcomeType='Unresolved' THEN 1 ELSE 0 END) TotalCaseProgressed,
cast(SUM(CASE WHEN t.clmOutcomeType='Unresolved' THEN 1 ELSE 0 END))/Count(t.clmCaseID) * 100 as decimal(18,2)) as [TotalCaseProgressed %],
SUM(CASE WHEN t.clmOutcomeType='Work In Progress' THEN 1 ELSE 0 END) TotalFurtherConReq,
cast(SUM(CASE WHEN t.clmOutcomeType='Work In Progress' THEN 1 ELSE 0 END))/Count(t.clmCaseID) * 100 as decimal(18,2)) as [TotalFurtherConReq %]
我有这个SELECT声明:
SELECT
t.clmUnit,
t.clmConType,
Count(t.clmCaseID) TotalCases,
SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END) TotalResolved,
cast(SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END) as decimal(18,2))/cast(Count(t.clmCaseID) as decimal(18,2))*100 as [TotalResolved %],
SUM(CASE WHEN t.clmOutcomeType='Unresolved' THEN 1 ELSE 0 END) TotalCaseProgressed,
cast(SUM(CASE WHEN t.clmOutcomeType='Unresolved' THEN 1 ELSE 0 END) as decimal(18,2))/cast(Count(t.clmCaseID)as decimal(18,2))*100 as [TotalCaseProgressed %],
SUM(CASE WHEN t.clmOutcomeType='Work In Progress' THEN 1 ELSE 0 END) TotalFurtherConReq,
cast(SUM(CASE WHEN t.clmOutcomeType='Work In Progress' THEN 1 ELSE 0 END) as decimal(18,2))/cast(Count(t.clmCaseID)as decimal(18,2))*100 as [TotalFurtherConReq %]
将输出列显示为十进制数字(例如)62.24837411,我知道我可以将其放入 excel 并将该列格式化为百分比,但我的问题是如何获得 SQL 将其转换为百分比?我尝试将 as decimal(18,2) 更改为 as decimal (4,2) 这是我想要的,但它只是抛出数学溢出错误?
试试这个:
select convert(DECIMAL(10,2),column)
精确到小数点后两位
你把 cast
放错地方了
cast(SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END) as decimal(18,2))/cast(Count(t.clmCaseID) as decimal(18,2))*100 as [TotalResolved %],
为整个结果放置 CAST
,如下所示:
cast(SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END)/cast(Count(t.clmCaseID) as decimal(18,2))*100 as decimal(18,2)) as [TotalResolved %],
AS Arul 建议,您需要对整列计算使用强制转换函数。
SELECT
t.clmUnit,
t.clmConType,
Count(t.clmCaseID) TotalCases,
SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END) TotalResolved,
cast(SUM(CASE WHEN t.clmOutcomeType='Resolved' THEN 1 ELSE 0 END))/Count(t.clmCaseID) * 100 as decimal(18,2)) as [TotalResolved %],
SUM(CASE WHEN t.clmOutcomeType='Unresolved' THEN 1 ELSE 0 END) TotalCaseProgressed,
cast(SUM(CASE WHEN t.clmOutcomeType='Unresolved' THEN 1 ELSE 0 END))/Count(t.clmCaseID) * 100 as decimal(18,2)) as [TotalCaseProgressed %],
SUM(CASE WHEN t.clmOutcomeType='Work In Progress' THEN 1 ELSE 0 END) TotalFurtherConReq,
cast(SUM(CASE WHEN t.clmOutcomeType='Work In Progress' THEN 1 ELSE 0 END))/Count(t.clmCaseID) * 100 as decimal(18,2)) as [TotalFurtherConReq %]