2016-04-02 2 views
0

Мне нужно рассчитать процентные брутто-продажи с разбиением по регионам на конкретном сегменте, т.е. Domestic Corp.
Моего запроса являетсяRegion wise percent

select REGION_NAME, 
      round(ratio_to_report(nvl(sum(gross_sales_amt_t),0)) over()*100) as Gr_Sales_domcorp 
from  fact_mfdex_segment A 
JOIN  dim_location B 
ON  a.branch_code = b.branch_code 
WHERE  to_date(DATE_SK,'YYYYMMDD') between '01-feb-2016' and '01-mar-2016' 
AND  week_flag='Y' 
AND  a.segments = 'Domestic Corp.' 
group by REGION_NAME; 

мне нужно повторить тот же запрос для НИЧА, РОЗНИЧНЫЕ Т.Д. вместо Domestic Corp. вместо того, чтобы писать разные запросы, я могу использовать свой первый запрос для добавления других сегментов. Я пробовал дело, но не работал. Любая помощь оценивается

ответ

0

Добавить a.segments в выбранных столбцов, удалить строку "И a.segments = ...", раздел ratio_to_report по a.segments, и группу по a.segments и REGION_NAME. Вы можете изменить имя выходного столбца с Gr_Sales_domcorp на Gr_Sales. Что-то вроде этого:

select  REGION_NAME, a.segments, 
      round(ratio_to_report(nvl(sum(gross_sales_amt_t),0)) 
        over (partition by a.segments)*100) as Gr_Sales 
from  fact_mfdex_segment A 
JOIN  dim_location B 
ON  a.branch_code = b.branch_code 
WHERE  to_date(DATE_SK,'YYYYMMDD') between '01-feb-2016' and '01-mar-2016' 
AND  week_flag='Y' 
group by a.segments, REGION_NAME 
order by a.segments, REGION_NAME 
+0

спасибо, что сработало для меня :) Мне просто пришлось добавить еще один блок выше, чтобы разделить его на разные столбцы с оператором case – ajith

+0

Вы должны иметь возможность создавать свои строки и столбцы с помощью поворота. С другой стороны, этот формат больше похож на требование ОТЧЕТНОСТИ; проще сделать с использованием стандартных средств отчетности, независимо от того, что используется в вашей организации. В любом случае - рад, что ты получил необходимую помощь. Ура! – mathguy

0

Просто включите все записи для требуемых сегментов, поместив их внутри предложения «IN», а затем также отгруппируйте по сегменту, и здесь вы ожидаете ожидаемых результатов.

select REGION_NAME, 
      round(ratio_to_report(nvl(sum(gross_sales_amt_t),0)) over()*100) as Gr_Sales_domcorp 
from  fact_mfdex_segment A 
JOIN  dim_location B 
ON  a.branch_code = b.branch_code 
WHERE  to_date(DATE_SK,'YYYYMMDD') between '01-feb-2016' and '01-mar-2016' 
AND  week_flag='Y' 
AND  a.segments IN ('Domestic Corp.','HNI','RETAIL') 
group by REGION_NAME, a.segments; 

+0

? Это не будет показывать региональную разбивку отдельно для Domestic Corp, отдельно для HNI и т. Д. Я думал, что требование OP было ясным. – mathguy

+0

Чтобы быть ясным: то, что вам не хватает, - это предложение partition_by в ratio_to_report. – mathguy

+0

@MaheshChand. Спасибо, но я хочу. Предположим, что есть 10 областей, тогда мне нужно 4 столбца и 10 строк. i, e regionname, gross_domcorp, gross_hni, gross_retail. – ajith