1. SQL / Говнокод #19360

    −49

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    select row_idx.row,row_idx.row_name,
           sum(
           case
              when exists(select R_USERS_DOLGN.ID_REC
                          from R_USERS_DOLGN
                          where R_USERS_DOLGN.USER_ID = USERS.ID_USER) then 1
              else 0
            end) SHTAT,
    ---и так далее---
    ---...---
            sum(
            case
              when exists(select R_USERS_DOLGN.ID_REC
                              from R_USERS_DOLGN
                              where R_USERS_DOLGN.USER_ID = USERS.ID_USER) and TAB_PLACE.TYPE_PLACE in (2, 3) then 1
              else 0
            end) STACZAN_v from USERS
     left outer join R_USERS_DOLGN on R_USERS_DOLGN.user_id = USERS.id_user
     left outer join SPR_DOLGN on  SPR_DOLGN.ID_DOLGN=R_USERS_DOLGN.DOLGN_ID  and
           R_USERS_DOLGN.LPID = USERS.LPID and 
           R_USERS_DOLGN.BEG_WORK <= :O_BEG and 
           R_USERS_DOLGN.END_WORK >= :O_END 
     join TAB_PRVD on TAB_PRVD.ID_PRVD= SPR_DOLGN.PRVD_ID
     right outer join (select 1 row,'Врачи – всего' row_name from rdb$database 
           union select 2 row,'Специалисты с высшим немедицинским образованием (т.1100 стр.122)' row_name from rdb$database
           union select 3 row,'Средний медперсонал – всего (т.1100 стр.128)' row_name from rdb$database
           union select 4 row,'Провизоры (т.1100 стр.175)' row_name from rdb$database
           union select 5 row,'Фармацевты (т.1100 стр.176)' row_name from rdb$database
           union select 6 row,'Младший медперсонал (т.1100 стр.177)' row_name from rdb$database
           union select 7 row,'Прочий персонал (т.1100 стр.179)' row_name from rdb$database
           union select 8 row,'Всего должностей (т.1100 стр.184)' row_name from rdb$database) row_idx
       on     (row_idx.row=1 and (spr_dolgn.group_dolgn=1))
           or (row_idx.row=2 and ', '||(select first (1) spec_list 
                   from spr_mkb_group_tabl_spec where num_pp=122)||',' like '%, '||tab_prvd.id_prvd||',%')
           or (row_idx.row=3 and (spr_dolgn.group_dolgn=2))
           or (row_idx.row=4 and (tab_prvd.id_prvd in (3,6,111,112,5003,5004,5005)))
           or (row_idx.row=5 and (spr_dolgn.id_dolgn=307))
           or (row_idx.row=6 and (spr_dolgn.group_dolgn=3))
           or (row_idx.row=7 and (spr_dolgn.group_dolgn=4))
           or (row_idx.row=8)
     left outer join TAB_PLACE on TAB_PLACE.ID_PLACE = R_USERS_DOLGN.PODR_ID
     where USERS.LPID = '+inttostr(LPU_CURRENT_ID)+
            ' group by 1,2

    Что-то меня накрыло. Вообще-то для таких вещей у нас тут есть отдельная таблица. В крайнем случае можно было сделать временную таблицу.

    Запостил: tucvbif, 28 Января 2016

    Комментарии (5) RSS

    • иногда мне кажется, что скулеёбы дадут 100 очков пыхомакакам
      срут самозабвенно, не следя даже за простейшими правилами по форматированию, именованию
      голову не включают
      и ведь ладно запрос мудак писал, но схему-то... схему - её же рахитектор должен делать, почему у него в голове такая же срань
      печаль
      Ответить
    • Один рас не пидарас :)
      Ответить
      • Все так говорят, а потом…
        Доктор, есть надежда на исцеление?
        Ответить
    • А можно, для самых маленьких, что этот запрос делает примерно кроме того как пугает?
      Ответить

    Добавить комментарий