2015-09-09 4 views
0

У меня есть результаты запроса, показанные ниже. Последняя строка является результатом With Rollup.SQL - Использование данных With Rollup в вычислении

Product Total 
5300   1 
5600   13 
5400   66 
5700  200 
NULL  280 

Есть ли способ использовать данные Rollup (280) в расчете, чтобы найти процент от общего количества? Поэтому я получаю это:

Product Total  % 
5300   1  3% 
5600   13  5% 
5400   66 22% 
5700  200 72% 
NULL  280  
+0

продукт не должен быть 1 '0,3%' (1/280) –

+0

Да оно должно быть. В качестве примера я просто ударил 1%. Я сделал редактирование. –

+0

, возможно, используя функцию окна или используя cte'With CTE as (yourQUERY) Выберите продукт, общее количество, общее количество/(выберите общее количество из cte, где продукт равен нулю) * 100 из cte', думая о окне сейчас ... – xQbert

ответ

0

Должно быть легко с помощью CTE. Теперь зависеть от того, насколько строгие на вашем выходе.

SQL FIDDLE DEMO

WITH total as (
    SELECT Total 
    FROM sumarize 
    WHERE Product IS NULL 
) 
SELECT S.*, (S.Total * 1.0/t.Total)*100 as porcent 
FROM sumarize S, total t 
0

Используйте функцию кадрирования, как этот

SELECT (Total/(SUM(Total) OVER(PARTITION BY Product)))*100 AS Percent 
+0

Я не уверен, что это правильный путь. Сначала я не смог скопировать строку на моей скрипке, чтобы попробовать ее. И знаменатель должен быть всегда одним и тем же, поэтому не уверен, что подсчет 'SUM() над partition' даст вам это. –

+0

ok, так что вы не хотите его разбивать? то просто используйте 'SUM (total) OVER()' – Hogan

Смежные вопросы