2013-03-22 65 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