преобразовать ответ в процент с двумя десятичными знаками SQL - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь выяснить, как преобразовать столбец "Процент мужского пола" в процент с десятичными числами в сотые

   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

1 Ответ

0 голосов
/ 27 апреля 2020

SQL Сервер по умолчанию сообщит целочисленное деление в виде целых чисел. Если вы хотите использовать два знака после запятой, используйте 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 только с двумя десятичными знаками, а не только с точностью до 2 десятичных знаков, затем используйте CONVERT:

CONVERT(DECIMAL(10,2), 100.0*COUNT(CASE WHEN gender = 'm' THEN 1 END) / COUNT(*))
...