将值转换为两位小数

时间:2012-03-10 12:59:25

标签: sql sql-server

需要帮助将“Pct_To_Total”列的值转换为

John,     0,36  
Sophia,   0,29  
Stella,   0,18  
Jennifer, 0,11  

仅需要两位小数,如果第三位小数大于值4,则需要将第二位小数转换为更高的值。

Orginal value

declare @T table  
(  
  Name varchar(50),  
  Sales decimal  
)  

insert into @T values  
('John',     '50'),  
('Sophia',   '40'),
('Stella',   '25'),  
('Jennifer', '15'), 
('Greg',     '10')  

SELECT a1.Name, a1.Sales, (a1.Sales /(SELECT SUM(Sales) FROM @T Total_Sales) ) AS Pct_To_Total
FROM @T a1, @T a2 
WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name) 
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC;

4 个答案:

答案 0 :(得分:1)

使用 Str()

STR(123.468, 8, 2)

结果

123.47

答案 1 :(得分:1)

SELECT round (cast(0.35714285 AS DECIMAL(10,2)),2);

这会给0.36您的例外结果。

我尝试了以下查询,它运行正常。

SELECT a1.Name, a1.Sales, round(cast((a1.Sales /(SELECT SUM(Sales) FROM @T Total_Sales)) AS DECIMAL(10,2)),2) AS Pct_To_Total
FROM @T a1, @T a2 
WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name) 
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC;

enter image description here

答案 2 :(得分:0)

您需要使用round功能

- &GT; http://msdn.microsoft.com/en-us/library/ms175003.aspx

有一些选择可以做到这一点;)

答案 3 :(得分:0)

SELECT ROUND(0.36, 2)   = 0.36
SELECT ROUND(0.364, 2)  = 0.36
SELECT ROUND(0.365, 2)  = 0.37
相关问题