2016-05-10 79 views
0

我有這樣的SELECT語句:如何修復SQL輸出到小數點後兩位

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將其轉換爲百分比?我試圖將十進制(18,2)更改爲十進制(4,2),這是我想要的,但它只是拋出數學溢出錯誤?

+0

我認爲你需要這個[鏈接](http://www.w3schools.com/sql/sql_func_round.asp) – Spiderman

+1

儘量不要每個值鑄造'DECIMAL'而是通過'1.0'乘以分子,然後將CAST最終結果轉換爲DECIMAL(5,2) –

回答

0

試試這個:

select convert(DECIMAL(10,2),column) 

爲2位小數

0

精度您是地方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 %], 
0

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 %] 
相關問題