2013-03-22 51 views
0

我已經將這個十進制值中的一些問題,如下圖所示:SQL十進制轉換

21.6080402010050 

誰能幫我將它轉換爲成爲21.6

我試過這個,但它不起作用。

​​

這是查詢

SELECT 
    t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, 
    t1.FAMILY, t1.CACHE_FAMILY, 
    SUM(t1.TOTAL) AS CountOfLineNo, t2.TotalOfLineNo, 
    (convert(decimal(8,1), SUM(t1.TOTAL)) * 100/t2.TotalOfLineNo) AS Percentage 
FROM (
    SELECT 
     LINE_NO, E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY, 
     Count(LINE_NO) as Total 
    FROM TX_HSA_SUMM 
    WHERE MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00') AND ('2013-03-08 10:20:00') 
    GROUP BY LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, FAMILY, CACHE_FAMILY) AS t1 
LEFT JOIN (
     SELECT LINE_NO, COUNT(LINE_NO) AS TotalOfLineNo 
     FROM TX_HSA_SUMM 
     WHERE MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00') AND ('2013-03-08 10:20:00') 
     GROUP BY LINE_NO) AS t2 ON t1.LINE_NO = t2.LINE_NO 
GROUP BY 
    t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, 
    t1.CACHE_FAMILY, t1.Total, t2.TotalOfLineNo 
ORDER BY 
    t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, 
    t1.CACHE_FAMILY, t1.Total, t2.TotalOfLineNo 

和輸出

LINE_NO E_FIELD F_FIELD G_FIELD HSA_STATUS FAMILY CACHE_FAMILY CountOfLineNo TotalOfLineNo Percentage 
23053B 00000 00000 00000 S SUMMIT WER 43 199 21.608040201005% 
+1

? – 2013-03-22 03:44:39

回答

1

請您使用什麼數據庫引擎,試試下面的查詢

SELECT t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, t1.CACHE_FAMILY, 
    SUM(t1.TOTAL) AS CountOfLineNo, t2.TotalOfLineNo, convert(decimal(18,1),(convert(decimal(8,1),SUM(t1.TOTAL)) * 100/t2.TotalOfLineNo)) AS Percentage 
    FROM (
      SELECT LINE_NO, E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY, Count(LINE_NO) as Total 
      FROM TX_HSA_SUMM 
      WHERE MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00') AND ('2013-03-08 10:20:00') 
      GROUP BY LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY 
     ) AS t1 
    LEFT JOIN (
      SELECT LINE_NO, COUNT(LINE_NO) AS TotalOfLineNo 
      FROM TX_HSA_SUMM 
      WHERE MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00') AND ('2013-03-08 10:20:00') 
      GROUP BY LINE_NO 
     ) AS t2 
     ON t1.LINE_NO = t2.LINE_NO 
    GROUP BY t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, t1.CACHE_FAMILY, t1.Total,t2.TotalOfLineNo 
    ORDER BY t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, t1.CACHE_FAMILY, t1.Total,t2.TotalOfLineNo 
+0

這段代碼確實有效。非常感謝Naresh。 – 2013-03-25 00:21:00

0

這應該爲你工作:

SELECT ROUND(21.6080402010050,1) 

SQL Fiddle Demo

它應該適用於大多數RDBMS。

爲您編輯:

ROUND((convert(decimal(8,1),SUM(t1.TOTAL)) * 100/t2.TotalOfLineNo),1) 
0

看一看的ROUND功能。

select round(21.6080402010050, 1) 

將工作MS SQL Server上或MySQL

+0

我也嘗試過。因爲實際上有很多行。以上是一些選擇查詢執行後的輸出 – 2013-03-22 03:50:47

+0

返回的行數並不重要。以下工作? '(round((convert(decimal(8,1),SUM(t1.TOTAL))* 100/t2.TotalOfLineNo),1)AS百分比' – 2013-03-22 04:22:51