[ОТВЕТИТЬ]
05.10.2012 17:55
didinap
 
Поставлена задачка написать отчет где по горизонтали должен выводится доход по выбранной группе в разрезе месяцев. Т.е если поставлена дата с 10.10.2010 до 11.11.2011 то выводилась бы доходность для данной группы/товару на каждый месяц в течении данной даты.


Это вырезка из отчета Profit_goods для версии 1.029.1.
Как нарезать на месяцы не пойму.
Не создавать же отдельный запрос для каждого месяца.

SQL код:
    sql_sub := 'insert into supermag.TTArticleDateProfit' || 
              
' (locid,article,forcmap,saledate,sum_notax,cp_notax)' || 
' select LOC_VAL,'||
              
'crd.article,' || 
        
'decode(crd.datatype,1,0,' || supermag.RepTools.LocString(20,'m') || ') forcmap' || 
         
s_dat   || ' dat,' || 
        
'round(sum(decode(m.salelocationto,null,1,-1)*SUM_SPEC),' || SetSum.round_sum || ') sumspec_notax,' ||   
        
'round(sum(decode(m.salelocationto,null,1,-1)*SUM_CP),'   || SetSum.round_sum || ') cp_notax' ||  
' from supermag.smcard crd,' ||           'supermag.' || supermag.RepTools.GetMapRepTbl(:P_FirstDate,:P_LastDate) || ' m' ||
    
' where m.saleop in ('   || SetSum.s_op_buyer_out   || ',' || SetSum.s_op_buyer_in   || ')' ||   
  
' and m.saletype in (' || SetSum.s_type_buyer_out || ',' || SetSum.s_type_buyer_in || ')' ||
  
' and m.saledate between ' || supermag.Rep_Date(:P_FirstDate) ||  
                     
' and ' || supermag.Rep_Date(:P_LastDate) ||
      
' FORCMAP_WHERE' ||  
  
' and crd.article=m.article' || 
        
supermag.RepTools.ClassString(4,'m') || 
        
supermag.RepTools.LocString(0,'nvl(m.salelocationfrom,m.salelocationto)') ||
' group by LOC_VAL,crd.article,decode(crd.datatype,1,0,' || supermag.RepTools.LocString(20,'m') || ')' || s_dat
05.10.2012 18:03
OlegON
 
не знаю объема БД, но один раз лет много назад была аналогичная задача, только по дням, кажется. собрал. этот монстр выжрал весь темп или анду десятками гигабайт (база была достаточно большая, а столбцов было много). поэтому я переделал и именно по месяцам запускал потом куски запроса. тут, кстати, где-то валялось, отчет "Марина" или вроде того.
05.10.2012 18:05
didinap
 
база щас на обрезке до 2009 года. Будут смотреть думаю максимум за два года. Этот отчет должен в хранилище быть?
Что то не могу найти этот отчет!
05.10.2012 19:40
OlegON
 
https://olegon.ru/showthread.php?t=845, правда не знаю, работает ли он. я еще на 8i его писал
05.10.2012 20:03
didinap
 
Спасибо, покапаюсь в нем там видно будет.

Там ексе файл. Мне надо чтоб вставить в отчет. может сохранился код?
05.10.2012 20:47
OlegON
 
очень сомнительно, увы :(
06.10.2012 03:15
didinap
 
кстати он чего то не заработал если что.
Ладно подождем, может еще кто поставит на путь истинный:)
06.10.2012 11:16
Mtirt
 
А зачем так-то?
В Бизнес-Анализе этот отчет делается в пару кликов мышью.
Причем именно в разрезе месяцев.
06.10.2012 11:57
didinap
 
Да, знаю. Там еще в этот отчет надо впихнуть многое. Все это в бизнес анализе выводится за два раза. Но клиент почему то настаивает именно на отчете.
06.10.2012 12:06
Mtirt
 
В своем отчету saledate заменяешь на month(saledate), по нему же добавляешь группировку.
Должно работать...
06.10.2012 12:41
didinap
 
спасибо попробую отпишусь.
06.10.2012 18:34
didinap
 
при попытке использования month(saledate) выдает ошибку про не верное выражение.

Пошел по другому пути

SELECT TO_CHAR(xDate,'MM') month ,TO_CHAR(xDate,'YYYY') ,count(*)
FROM test1
GROUP BY TO_CHAR(xDATE,'MM') ,To_CHAR(xDate,'YYYY')
08.10.2012 20:10
didinap
 
Не пойму что не так.

Хочу отобрать каждый месяц года используя MAX.
Oracle не ругается но и не выдает максимальный месяц, а выводит весь период.

Цитата:
select locid,forcmap, TO_CHAR(MIN(saledate), 'MM') AS month2, TO_CHAR (saledate,'YYYY') year, decode(sign(sum(cp_notax)),0,to_number(null),-sign(sum(sum_notax)),
to_number(null),sum(sum_notax-cp_notax)*100/sum(cp_notax)) profit, sum(sum_notax) sum_notax, sum(cp_notax) cp_notax from
supermag.TTArticleDateProfit
group by locid,forcmap, TO_CHAR (saledate,'MM'), TO_CHAR(saledate,'YYYY')
ORDER BY 4 ASC,3 ASC

09.10.2012 08:07
OlegON
 
попробуй для правильного направления оставить одну колонку года в группировке сначала (мне попробовать не на чем)
09.10.2012 14:22
didinap
 
Чем дальше тем понятней что этот отчет мне не под силу.
Знаю что не в тему, но может кто захочет подзаработать?

OlegON:
это на [email]support@olegon.ru[/email] можно отправить ТЗ
09.10.2012 14:27
Mtirt
 
Попробуй trunc(saledate, 'Month').
Это будет первое число месяца.
По нему и сгруппируй...
Опции темы


Часовой пояс GMT +3, время: 03:35.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.