将答案转换为带有两位小数的百分比SQL

问题描述 投票:0回答:1

我正在尝试找出如何将“男性百分比”列转换为带有小数到百分之一的百分数

   select Top 20 pa.State,
   Sum(case when p.gender='M' then 1 else 0  end) as [Male Count],
   Sum(case when p.gender='F' then 1 else 0 end) as [ Female Count],
   100*sum(case when gender='m' then 1 else 0 end )/count(*) as [Male Percentage]

   From [dbo].[Patients] as p
    Join PatientAddresses as pa
    on p.mrn=pa.MRN
   group by pa.State

我得到的结果。

 State    Male Count   Female Count   Male Percentage
  UT      105             120             46
  NC      1152            1123            50
   WI     700               669           51
   MA       1486            1424             51
percentage
1个回答
0
投票

默认情况下,SQL Server将报告整数除法为整数。如果要强制两位小数,请使用ROUND(x, 2),其中x是浮点数。使x成为浮点数的一种方法是将百分比乘以浮点数100.0而不是整数100

SELECT TOP 20
    pa.State,
    COUNT(CASE WHEN p.gender = 'M' THEN 1 END) AS [Male Count],
    COUNT(CASE WHEN p.gender = 'F' THEN 1 END) AS [Female Count],
    ROUND(100.0*COUNT(CASE WHEN gender = 'm' THEN 1 END) / COUNT(*), 2) AS [Male Percentage]
FROM [dbo].[Patients] AS p
INNER JOIN PatientAddresses AS pa
    ON p.mrn = pa.MRN
GROUP BY
    pa.State;

旁注:在没有TOP的情况下使用ORDER BY并没有多大意义,因为尚不清楚要查看的20条记录。因此,在这里添加ORDER BY子句可能是您想要的,除非您可以返回20个随机状态。

编辑:

如果要

view

SSMS中的输出仅具有两位小数位,而不仅仅是具有两位小数位的精度,则使用CONVERT
CONVERT(DECIMAL(10,2), 100.0*COUNT(CASE WHEN gender = 'm' THEN 1 END) / COUNT(*))

© www.soinside.com 2019 - 2024. All rights reserved.