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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Sum складывает неправельно 
V
    Опции темы
ziga
Дата 15.1.2009, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



может кто на глаз сможет определить как решить проблему, есть ужасный smile запрос:

Код

select distinct d.id_dep, decode(d.id_dep, null, ' Не указано', d.name_dep) "Подразделение",
      hn.id_human, 
      hn.last_name || ' ' || hn.first_name || ' ' || hn.middle_name "ФИО",
      am.id_asp_mup,
      am.name "Курс РП", p.minutes_in_hour,
      (sum (sum1 / p.minutes_in_hour) over (partition by d.id_dep, hn.id_human)) maxi,
      (sum (sum2 / p.minutes_in_hour) over (partition by d.id_dep, hn.id_human)) maxi2,      
      round(sum1 / p.minutes_in_hour) sum1,
      round(sum2 / p.minutes_in_hour) sum2      

    from department d, teacher_department td, asp_asp_mup aam, v_human_name hn, v_asp_mup am,
         v_asp a, v_program p,
         (
          -- пары без учета read_forms
          select atrf.id_teacher,
                  atrf.id_asp_mup,
                  count(aml.id_asp_mup_lesson) count1,
                  sum(0.01 * nvl(atrf.percent, 100) * aml.lesson_length) sum1
            from asp_teacher_read_forms atrf, v_asp_mup_lesson aml
           where nvl(atrf.id_read_forms, -1) < 0
             and atrf.id_asp_mup = aml.id_asp_mup
           group by atrf.id_teacher, atrf.id_asp_mup
          union all
          select amt.id_teacher,
                 amt.id_asp_mup,
                 count(aml.id_asp_mup_lesson) count1,
                 sum(aml.lesson_length) sum1
            from asp_mup_teacher amt, v_asp_mup_lesson aml
           where amt.id_asp_mup = aml.id_asp_mup
             and (amt.id_teacher, amt.id_asp_mup) not in
                 (select id_teacher, id_asp_mup from asp_teacher_read_forms)
           group by amt.id_teacher, amt.id_asp_mup
          -- пары с учетом read_forms

          union all
          select atrf.id_teacher,
                 atrf.id_asp_mup,
                 count(aml.id_asp_mup_lesson) count1,
                 sum(0.01 * nvl(atrf.percent, 100) * aml.lesson_length) sum1
            from asp_teacher_read_forms atrf, v_asp_mup_lesson aml
           where nvl(atrf.id_read_forms, -1) >= 0
             and atrf.id_asp_mup = aml.id_asp_mup
             and atrf.id_read_forms = aml.id_read_forms
           group by atrf.id_teacher, atrf.id_asp_mup) z1,
         (select tm.id_teacher,
                 sm.id_asp_mup,
                 count(sm.id_study_meeting) count2,
                 sum(sm.length) sum2,
                 to_char(sm.datetime_meeting, 'dd.mm.yy') datetime_meeting
            from v_study_meeting sm, teacher_meeting tm
           where sm.id_study_meeting = tm.id_study_meeting
             and ((&P_DATE_BEGIN is null) or
                 (trunc(cast(sm.datetime_meeting as date)) between
                 to_date(&P_DATE_BEGIN) and to_date(&P_DATE_END)))
           group by tm.id_teacher,
                    sm.id_asp_mup,
                    to_char(sm.datetime_meeting, 'dd.mm.yy')) z2
   where ((&id_fak is null) or (td.id_dep in (SELECT * FROM TABLE(CAST(str2table(&id_fak) AS t_table_type_num)))))
   and ((&id_fak1 is null) or (hn.id_human in (SELECT * FROM TABLE(CAST(str2table(&id_fak1) AS t_table_type_num)))))
     and z1.id_teacher = td.id_teacher(+)
     and td.id_dep = d.id_dep(+)
     and td.is_main(+) = 1
     and z1.id_asp_mup = aam.id_asp_mup
     and aam.id_asp = a.id_asp
        --and ((&ID_ASP is null) or (&ID_ASP=a.id_asp))
     and a.id_program = p.id_program
        --and ((&ID_PROGRAM is null) or (&ID_PROGRAM=p.id_program))
     and z1.id_teacher = hn.id_human
     and aam.id_asp_mup = am.id_asp_mup
     and z1.id_asp_mup = z2.id_asp_mup(+)
     and z1.id_teacher = z2.id_teacher(+)
     and datetime_meeting > '00.00.00000'

   order by --datetime_meeting,
            "ФИО",
            "Подразделение",
            "Курс РП"


вот тут:

Код

      (sum (sum1 / p.minutes_in_hour) over (partition by d.id_dep, hn.id_human)) maxi,
      (sum (sum2 / p.minutes_in_hour) over (partition by d.id_dep, hn.id_human)) maxi2,    


должно вывести сумму полей sum1 и sum2 но почемуто он к общей суме прибавляет ещё раз первую строку поля в итоге получается неправельное значение, вот результат:

Код

id_dep    Подраздел.   id_human                ФИО                              id_asp_mup     Курс РП    minutes_in_hour  maxi       maxi2    sum1   sum2      
3       Факультет       3915          Донцова Людмила Васильевна     1129          Финансовый    60           168    59    24    3
3       Факультет       3915          Донцова Людмила Васильевна     1129          Финансовый    60           168    59    24    6
3       Факультет       3915          Донцова Людмила Васильевна     1129          Финансовый    60           168    59    24    7
3       Факультет       3915          Донцова Людмила Васильевна     1129          Финансовый    60           168    59    24    9
3       Факультет       3915       Донцова Людмила Васильевна     1129          Финансовый    60           168    59    24    13
3       Факультет       3915          Донцова Людмила Васильевна     1129          Финансовый    60          168    59    24    20

PM MAIL   Вверх
DimW
Дата 15.1.2009, 09:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



это не сум глючит, а скорей всего вы просто не дофетчили одну строку со значениями sum2 = 1 и sum1 = 24.
могу предположить что вы пользуетесь PL/SQL developer в котором по умолчанию количество фетченных строк зависит от того на сколько вы поднимите или опустите сплитер понели результата. 


PM MAIL ICQ   Вверх
ziga
Дата 15.1.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да я пользуюсь PL/SQL developer но результат я вижу болностью всего 6 строчек, что самое интересное если я distinct убераю то там 7 строчек, вобщем проблема была в том, что по счастливому случаю поле sum2 содержало 2 одинаковых результат = 3 они объеденились в 1 строчку и из-за этого эту строку я не видел smile а сум не глючет вы правы он считает всё правильно. 
PM MAIL   Вверх
DimW
Дата 15.1.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(ziga @  15.1.2009,  10:24 Найти цитируемый пост)
что самое интересное если я distinct убераю 

да..., на дистинкт я внимание не обратил. smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




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


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

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