подправить запрос

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
andrew111
Сообщения: 1
Зарегистрирован: 07 июн 2006, 15:00

подправить запрос

Сообщение andrew111 » 07 июн 2006, 15:35

Привет. Есть такой запрос

select simple_raspisanie.DISCIPLINA_ID,simple_vedomost.student_id

,sum(case when simple_vedomost.mark_id = 1 then simple_vedomost.mark_id else 0 end) /1 as mark_id1
,sum(case when simple_vedomost.mark_id = 2 then simple_vedomost.mark_id else 0 end) /2 as mark_id2
,sum(case when simple_vedomost.mark_id = 3 then simple_vedomost.mark_id else 0 end) /3 as mark_id3
,sum(case when simple_vedomost.mark_id = 4 then simple_vedomost.mark_id else 0 end) /4 as mark_id4
,sum(case when simple_vedomost.mark_id = 5 then simple_vedomost.mark_id else 0 end) /5 as mark_id5
,sum(case when simple_vedomost.mark_id = 6 then simple_vedomost.mark_id else 0 end) /6 as mark_id6
,sum(case when simple_vedomost.mark_id = 7 then simple_vedomost.mark_id else 0 end) /7 as mark_id7
,sum(case when simple_vedomost.mark_id = 8 then simple_vedomost.mark_id else 0 end) /8 as mark_id8
,sum(case when simple_vedomost.mark_id = 9 then simple_vedomost.mark_id else 0 end) /9 as mark_id9
, count(propuski.c) asd
,sum(case when propuski.prichina_id= 2 then 2 else 0 end) /2 as prich1
,sum(case when propuski.prichina_id= 3 then 3 else 0 end) /3 as prich2
,sum(case when propuski.prichina_id= 4 then 4 else 0 end) /4 as prich3
,sum(case when propuski.prichina_id= 1001 then 1001 else 0 end) /1001 as prich4
,sum(case when propuski.prichina_id= 1002 then 1002 else 0 end) /1002 as prich5
,sum(case when propuski.prichina_id= 1003 then 1003 else 0 end) /1003as prich6
,sum(case when propuski.prichina_id= 1004 then 1004 else 0 end) /1004 as prich7
,sum(case when propuski.prichina_id= 1005 then 1005 else 0 end) /1005 as prich8
,sum(case when propuski.prichina_id= 1006 then 1006 else 0 end) /1006 as prich9
,sum(case when propuski.prichina_id= 1007 then 1007 else 0 end) /1007 as prich10
,sum(case when propuski.prichina_id= 1008 then 1008 else 0 end) /1008 as prich11
,sum(case when propuski.prichina_id= 1009 then 1009 else 0 end) /1009 as prich12
,sum(case when propuski.prichina_id= 1010 then 1010 else 0 end) /1010 as prich13
,sum(case when propuski.prichina_id= 1011 then 1011 else 0 end) /10011 as prich14
,sum(case when propuski.prichina_id= 1012 then 1012 else 0 end) /1012 as prich15
,sum(case when propuski.prichina_id= 1013 then 1013 else 0 end) /1013 as prich16
,sum(case when propuski.prichina_id= 1014 then 1014 else 0 end) /1014 as prich17
,sum(case when propuski.prichina_id is null then NULL else 0 end) as prichnull
, sum(case when SP_PROPUSK_PRICHINA_WHAT_FULL.flag = 4
then 1 else 0 end) as flag4
, sum(case when SP_PROPUSK_PRICHINA_WHAT_FULL.flag = 1
then 1 else 0 end) as flag1
, sum(case when SP_PROPUSK_PRICHINA_WHAT_FULL.flag = 2
then 1 else 0 end) as flag2
, sum(case when SP_PROPUSK_PRICHINA_WHAT_FULL.flag = 3
then 1 else 0 end) as flag3






from simple_raspisanie
left join simple_vedomost on simple_vedomost.simple_raspisanie_id = simple_raspisanie.c
left join students_pool on students_pool.c = simple_vedomost.student_id
left join propuski on propuski.student_id = simple_vedomost.student_id and simple_raspisanie.datee between propuski.from_date and propuski.to_date
left join SP_PROPUSK_PRICHINA_WHAT_FULL on SP_PROPUSK_PRICHINA_WHAT_FULL.propusk_prichina_id = propuski.prichina_id


group by 1,2


в таблице пропуски по датам. Так же в ней есть линк (prichina_id) на другую таблицу где описываются причины пропусков.
Поледний линк на таблицу SP_PROPUSK_PRICHINA_WHAT_FULL. В ней записаны расшибровки причин пропусков

....
flag
para_no
disciplina_id
lesson_type_id

В нейф описываются причины. Таковых есть 4 (flag).
1. от отдельных предметов
2. от только пар - типа от 1 и 3 пары
3. от типов предметов.
соответственно в последних трех полях записываьтся идентификаторы в зависимости от flag.
Вроде все ок. Но в этой таблице на один одну прицину может быть несколько записией. Например освобожден от 1 и 3 пары.
Если ее линкуешь - показывает неправильно значения полей
prich1-17. Но..
Вопрос - что добавыть в запрос чтообы он в полях flag1-4 показывало количество пропусков подпадающих под условия из таблиц propuski и SP_PROPUSK_PRICHINA_WHAT_FULL. Либо чтобы показывала 0 либо количество пропусков по условию.

Несколько сумбурно изложил ....


Thanks

Ответить