Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл, Упростить запрсо 
:(
    Опции темы
KAV2008
Дата 2.2.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Подскажите пожалуйста как упростить запрос сделать его в цикле

Запрос выводит по каждому клиенту сумму на каждый день за указанный период времени
Код

  select  a18.CLIENT_ID
                         
                  ,  Max(decode(a18.date_plan, TO_DATE('01/01/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), a18.DAY_WEIGHT)) "day1_m1" 
                 ,  Max(decode(a18.date_plan, TO_DATE('01/02/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), a18.DAY_WEIGHT)) "day2_m1" 
                
                       --****
                 
                ,  Max(decode(a18.date_plan, TO_DATE('30/02/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), a18.DAY_WEIGHT)) "day30_ m2" 
                  ,  Max(decode(a18.date_plan, TO_DATE('30/02/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), a18.DAY_WEIGHT)) "day31_m2" 
                 
                
                   
                    from   ARC_PLAN_DAY    a18 
                        where  (to_number(to_char(a18.DATE_PLAN, 'MM'))=:m  or to_number(to_char(a18.DATE_PLAN, 'MM'))=:m2)
                      and (to_number(to_char(a18.DATE_PLAN, 'yyyy'))=:g or to_number(to_char(a18.DATE_PLAN, 'yyyy'))=:g2)
                        group by a18.CLIENT_ID;

результат запроса
клиент  day1_m1   day2_m1      ****   day31_m2
------------------------------------------------------------
клиент 1   20             40                          13
клиент2    13             22                          9   
Как изменить запрос чтоб строились столбцы в указанный диапозон от 04.02.2011 до 15.03.2011 например

Спасибо

PM MAIL   Вверх
Zloxa
Дата 2.2.2011, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



запрос - никак. Структура результата запроса не должна зависеть от исходных данных, это основополагающий принцип sql.
однако текст запроса можно формировать динамически.
rtfm execute immediate, dbms_sql, pivot

Добавлено через 8 минут и 51 секунду
Цитата(KAV2008 @  2.2.2011,  13:54 Найти цитируемый пост)
                        where  (to_number(to_char(a18.DATE_PLAN, 'MM'))=:m  or to_number(to_char(a18.DATE_PLAN, 'MM'))=:m2)
                      and (to_number(to_char(a18.DATE_PLAN, 'yyyy'))=:g or to_number(to_char(a18.DATE_PLAN, 'yyyy'))=:g2)

это же просто офигеть.
вам действительно нужно получить данные за месяц m любого года, а так же за месяц m2 года g и, к тому еще все данные года g2?
Выглядит так как будто бы автор не совсем понимает то, что написал.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 2.2.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(KAV2008 @  2.2.2011,  13:54 Найти цитируемый пост)
TO_DATE('30/02/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS')

дата - офигенная   smile 
как, простите, назвыается тридцатый месяц?
Ах, попутали дни и месяцы? А сколько, получается дней в феврале?  smile 

В вашем случае время указывать не обязательно, так будет читаемей:
Код

TO_DATE('30/01/2011', 'DD/MM/YYYY')

для 10g и выше
Код

date '2011-01-30'


Это сообщение отредактировал(а) Zloxa - 2.2.2011, 14:38


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
KAV2008
Дата 3.2.2011, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Спасибо за ответы 
Можно пример как  верхнюю часть упростить в запросе, а не программно  его собирать,
или хотя бы параметры поставить месяца и года - 

(верхняя чсть запроса у нас динамическая собирается программно в зависисмости от условий - периода выборки)

Комментарии:

Цитата(Zloxa@ )
Цитата

where  (to_number(to_char(a18.DATE_PLAN, 'MM'))=:m  or to_number(to_char(a18.DATE_PLAN, 'MM'))=:m2)
                      and (to_number(to_char(a18.DATE_PLAN, 'yyyy'))=:g or to_number(to_char(a18.DATE_PLAN, 'yyyy'))=:g2)


это же просто офигеть.
вам действительно нужно получить данные за месяц m любого года, а так же за месяц m2 года g и, к тому еще все данные года g2?
Выглядит так как будто бы автор не совсем понимает то, что написал.



                        
Данные выбираются за период-  параметры m2 и g2  используются  если период начинается в одном годе а заканчивается в другом (например декабрь январь),





Это сообщение отредактировал(а) KAV2008 - 3.2.2011, 05:27
PM MAIL   Вверх
KAV2008
Дата 3.2.2011, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Спасибо за ответы 

может кто подскажет пример как можно упростить запрос

верхняя часть запроса формируется автоматически программно циклом  в зависимости от выбранного диапазона



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.