Я решил эту проблему, но мне просто интересно, почему это работает так, как работает. У меня есть временная таблица, из которой я выбираю, и я хочу отобразить имя, количество записей, соответствующих этому имени, и процентную долю этого имени от общего количества записей. У меня так было изначально:
SELECT name, number,
CASE WHEN number = 0 THEN 0 ELSE
convert(Numeric(10,2), number / CONVERT(decimal(5,2),SUM(number)) * 100)
END as "Percentage of Total"
FROM #names
group by name, number
Результаты, которые я получил, были:
name number Percentage of Total
------------------------- ----------- ---------------------------------------
Test 1 0 0.00
Test 2 22 100.00
Test 3 28 100.00
Когда я изменяю запрос на это, результаты верны:
declare @total decimal(5,2)
select @total = SUM(number) FROM #names
SELECT name, number, convert(Numeric(10,2), number/ @total * 100) as "Percentage of Total"
FROM #names
group by name, number
Правильные результаты:
name number Percentage of Total
------------------------- ----------- ---------------------------------------
Test 1 22 44.00
Test 2 0 0.00
Test 3 28 56.00
Может кто-нибудь объяснить, что происходит, я хотел бы понять это лучше. Спасибо!
Jon