sql - 将值转换为两位小数

标签 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;

最佳答案

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

这给出了 0.36 您的异常(exception)结果。

我尝试了以下查询,它工作正常。

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

关于sql - 将值转换为两位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646620/

相关文章:

mysql - 计算 mySQL 中特定用户每天的条目数

sql - 如何做相当于 "limit distinct"?

c# - 事务必须在 SQL Server 的存储过程中吗?

sql - 将行从 sql server 转换为 oracle

c# - Visual Studio 2008 商业智能 SQL Server,安装 C#?

sql - mysql 5.0 的 GUI 工具

sql - Oracle - 查找列中值最连续出现的组

SQL 选择两个表中的行

sql-server - 如何在sql server中使用like运算符选择匹配百分比高于其他记录的记录?

mysql - 如何从三个单独的表返回一个输出表,其中每个表在 MySQl Workbench 中的每个输入表中都有一行?