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(*))