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

    −1

    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
    CREATE OR REPLACE VIEW LOAD_PROMOTIONCATEGORY
    AS
    SELECT
     ROW_NUMBER() OVER (ORDER BY CATEGORY_NAME,SUBCATEGORYNAME ASC) AS PROMOTIONCATEGORYID
    , CATEGORY_NAME
    , SUBCATEGORYNAME
    FROM
    (
    SELECT
    DISTINCT
     PROMO_CATEGORY AS CATEGORY_NAME
    , PROMO_SUBCATEGORY AS SUBCATEGORYNAME
    FROM
    LIY26.LI_PROMOTIONS
    ) PROMO

    Правда, я впервые вижу такую расстановку строк... Сколько не пытаюсь понять ее логику — нифига.

    morpheby, 16 Декабря 2016

    Комментарии (27)
  2. SQL / Говнокод #21793

    +1

    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
    SELECT NVL(ГРУППЫ.НГ, 'ИТОГО') "ГРУППА", DECODE(GROUPING(ГРУППЫ.НГ), 0, AVG(ГРУППЫ.КОЛВО),
                                                                         1, (SELECT COUNT(НОМЕР_СТУДЕНТА) FROM СТУДЕНТ)) "КОЛ-ВО СТУДЕНТОВ", 
          DECODE(GROUPING(ГРУППЫ.НГ), 0, ГРУППЫ.НАЗВ_НАП,
                                      1, (SELECT LISTAGG(НАЗВАНИЕ_НАПРАВЛЕНИЯ, ', ') 
                                              WITHIN GROUP (ORDER BY НАЗВАНИЕ_НАПРАВЛЕНИЯ)
                                          FROM НАПРАВЛЕНИЕ
                                          WHERE КОД_НАПРАВЛЕНИЯ IN (SELECT КОД_НАПРАВЛЕНИЯ
                                                                    FROM ГРУППА))) "НАЗВАНИЕ СПЕЦИАЛЬНОСТИ", 
          COUNT(НОМ_СТУД)"КОЛ-ВО КРУГЛЫХ ОТЛИЧНИКОВ", 
       NVL(LISTAGG(ФАМ, ', ') WITHIN GROUP (ORDER BY ФАМ), ' ') "ФАМИЛИИ ОТЛИЧНИКОВ" 
    FROM                              
        (SELECT COUNT(*) КОЛВО, СТ.НОМЕР_ГРУППЫ НГ, НАП.НАЗВАНИЕ_НАПРАВЛЕНИЯ НАЗВ_НАП 
                          FROM СТУДЕНТ СТ LEFT OUTER JOIN                             
                                ГРУППА ГР ON СТ.НОМЕР_ГРУППЫ=ГР.НОМЕР_ГРУППЫ
                                LEFT OUTER JOIN НАПРАВЛЕНИЕ НАП ON НАП.КОД_НАПРАВЛЕНИЯ=ГР.КОД_НАПРАВЛЕНИЯ
                          GROUP BY СТ.НОМЕР_ГРУППЫ, НАП.НАЗВАНИЕ_НАПРАВЛЕНИЯ) ГРУППЫ
                      
    LEFT OUTER JOIN
        (SELECT СТ.НОМЕР_СТУДЕНТА НОМ_СТУД, СТ.НОМЕР_ГРУППЫ НОМ_ГРУП, НГ.КОД_НАПРАВЛЕНИЯ КОД_НАПР, СТ.ФАМИЛИЯ ФАМ, 5 СРЕД_ОЦЕНКА
        FROM СТУДЕНТ СТ INNER JOIN ГРУППА НГ ON СТ.НОМЕР_ГРУППЫ=НГ.НОМЕР_ГРУППЫ
                                    LEFT JOIN УЧЕБНЫЙ_ПЛАН УП ON НГ.КОД_НАПРАВЛЕНИЯ=УП.КОД_НАПРАВЛЕНИЯ
                                    LEFT JOIN УСПЕВАЕМОСТЬ УСП ON УСП.НОМЕР_СТУДЕНТА=СТ.НОМЕР_СТУДЕНТА AND УСП.НОМЕР_ДИСЦИПЛИНЫ=УП.НОМЕР_ДИСЦИПЛИНЫ       
        INTERSECT
        --ТАБЛИЦА "ПЕРВ"
        SELECT ВТОР.НОМЕР_СТУДЕНТА, ВТОР.Н_Г, ВТОР.КОД_НАПР, ВТОР.ФАМ, ВТОР.СРЕД_ОЦЕНКА 
        FROM  
            (SELECT КОД_НАПРАВЛЕНИЯ, COUNT(НОМЕР_ДИСЦИПЛИНЫ) CNT
            FROM УЧЕБНЫЙ_ПЛАН
            GROUP BY КОД_НАПРАВЛЕНИЯ) ПЕРВ
        INNER JOIN
        (SELECT НОМЕР_СТУДЕНТА, КОД_НАПР, Н_Г, ФАМ, COUNT(НОМ_ДИСЦИП) CNT, AVG(ОЦЕН) СРЕД_ОЦЕНКА
        FROM  
            (SELECT СТ.НОМЕР_СТУДЕНТА, ГР.НОМЕР_ГРУППЫ Н_Г, СТ.ФАМИЛИЯ ФАМ, УП.КОД_НАПРАВЛЕНИЯ КОД_НАПР, УС.НОМЕР_ДИСЦИПЛИНЫ НОМ_ДИСЦИП, УС.ОЦЕНКА ОЦЕН
            FROM УСПЕВАЕМОСТЬ УС INNER JOIN СТУДЕНТ СТ ON УС.НОМЕР_СТУДЕНТА=СТ.НОМЕР_СТУДЕНТА
                                LEFT OUTER JOIN ГРУППА ГР ON СТ.НОМЕР_ГРУППЫ=ГР.НОМЕР_ГРУППЫ
                                LEFT OUTER JOIN УЧЕБНЫЙ_ПЛАН УП ON ГР.КОД_НАПРАВЛЕНИЯ=УП.КОД_НАПРАВЛЕНИЯ AND УП.НОМЕР_ДИСЦИПЛИНЫ=УС.НОМЕР_ДИСЦИПЛИНЫ )
            INNER JOIN УЧЕБНЫЙ_ПЛАН УП2 ON УП2.КОД_НАПРАВЛЕНИЯ=КОД_НАПР AND УП2.НОМЕР_ДИСЦИПЛИНЫ=НОМ_ДИСЦИП
        GROUP BY НОМЕР_СТУДЕНТА, КОД_НАПР, Н_Г, ФАМ) ВТОР
        ON ПЕРВ.КОД_НАПРАВЛЕНИЯ=ВТОР.КОД_НАПР AND ПЕРВ.CNT=ВТОР.CNT ) ОТЛ
    ON ГРУППЫ.НГ=ОТЛ.НОМ_ГРУП
    GROUP BY GROUPING SETS((ГРУППЫ.НГ, ГРУППЫ.НАЗВ_НАП),());

    ilgsha, 06 Декабря 2016

    Комментарии (18)
  3. SQL / Говнокод #21754

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    --Проверка существования контракта
        select con.id_column
          into l_id
          from contract con
         where con.dt_start <= pDATE
           and con.dt_stop > pDATE;
    
        if l_id is null  then
          raise_application_error(-20000,
                                  'Ошибка поиска контракта на дату' || pDATE);
        end if;

    Блок pl sql, ищет контракт на указанную данную. Но результат всегда будет либо idl, либо no_data_found. Но проверок много не бывает :)

    myxolod, 30 Ноября 2016

    Комментарии (4)
  4. SQL / Говнокод #21686

    +2

    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
    SELECT `hours`.`hour` as `h` ,SUM(IF(HOUR(`i`.`time`)=`hours`.`hour`,1,0)) as `count`
            FROM `table_name` i
             INNER JOIN (SELECT 0 `hour`
                 UNION ALL SELECT 1
                 UNION ALL SELECT 2
                 UNION ALL SELECT 3
                 UNION ALL SELECT 4
                 UNION ALL SELECT 5
                 UNION ALL SELECT 6
                 UNION ALL SELECT 7
                 UNION ALL SELECT 8
                 UNION ALL SELECT 9
                 UNION ALL SELECT 10
                 UNION ALL SELECT 11
                 UNION ALL SELECT 12
                 UNION ALL SELECT 13
                 UNION ALL SELECT 14
                 UNION ALL SELECT 15
                 UNION ALL SELECT 16
                 UNION ALL SELECT 17
                 UNION ALL SELECT 18
                 UNION ALL SELECT 19
                 UNION ALL SELECT 20
                 UNION ALL SELECT 21
                 UNION ALL SELECT 22
                 UNION ALL SELECT 23) `hours`
     	 	 WHERE `service_id`= SOME_SERVICE_ID
                        AND `date` BETWEEN STR_TO_DATE(SOME_DATE, '%Y-%m-%d ')
    							      AND  STR_TO_DATE(SOME_DATE, '%Y-%m-%d ')
             GROUP BY `hours`.`hour`

    Объединений много не бывает...

    fens, 17 Ноября 2016

    Комментарии (9)
  5. SQL / Говнокод #21630

    +4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    /* где-то на 4м уровне подзапросов из подзапросов нашёл такое:  */
    ( 
    	SELECT 1 AS num , .... 120 строк логики на case/when/then ....
    	FROM tablea a 
                   WHERE a.id = @id /*  70млн, есть индекс по id, не уникальный */
    ) AS tbl1 
     LEFT JOIN ( 
    	SELECT 1 AS num , еще чуть-чуть case/when/then
    		FROM tableb b 
    		WHERE b.reference = @value /* 80млн, есть индекс но половина записей - пустые строки. */ ) AS tbl2
    	ON tbl1.num = tbl2.num

    left join по константам.

    bliznezz, 02 Ноября 2016

    Комментарии (2)
  6. SQL / Говнокод #21276

    +7

    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
    (case 
          when (ccc.company_ogrn=0 or ccc.company_ogrn='') 
          then '<span class=red>не заполнено, заполните в 1С</span>' else ccc.company_ogrn end ) 
          else ccc.company_ogrn end company_ogrn,
         case when ccc.company_prefix <> 4 then 
         (case when (ccc.company_kpp=0 or ccc.company_kpp='') 
         then '<span class=red>не заполнено, заполните в 1С</span>' 
         else ccc.company_kpp end ) else ccc.company_kpp end company_kpp,
        case when ccc.company_prefix = 0 then 
         '<span class=red>не заполнено, заполните в 1С</span>' 
         else ccp.prefix_name end prefix_name,
        case when ccc.company_jur_name = '' then 
         '<span class=red>не заполнено, заполните в 1С</span>' 
         else ccc.company_jur_name end company_jur_name,
        case when ccc.company_inn = '' then 
        '<span class=red>не заполнено, заполните в 1С</span>' 
        else ccc.company_inn end company_inn,
        case when company_jur_address = '' then 
        '<span class=red>не заполнено, заполните в 1С</span>' else 
        ccc.company_jur_address end company_jur_address,
        case when ccc.company_fact_address = '' then 
        '<span class=red>не заполнено, заполните в 1С</span>' else 
        ccc.company_fact_address end company_fact_address,
        case when ccc.company_post_address = '' then 
        '<span class=red>не заполнено, заполните в 1С</span>' else 
        ccc.company_post_address end company_post_address,

    Да, это часть MySql запроса.
    Верстка в SQL, Карл

    ixvil, 27 Сентября 2016

    Комментарии (17)
  7. SQL / Говнокод #21274

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Orders1]') AND type in (N'U'))
      IF EXISTS (SELECT * FROM [dbo].[Orders1])
    BEGIN
       SELECT * FROM [dbo].[Orders1] where OrderID = 1
    END

    Кусок кода из живого проекта в котором очень сильно борятся за перформенс.

    foxocoder, 26 Сентября 2016

    Комментарии (3)
  8. SQL / Говнокод #20828

    +317

    1. 1
    2. 2
    3. 3
    CREATE FUNCTION this_function_check_first_payment_under_agreement_without_previous_periods
    (
    ....

    Ну вот сразу всё понятно)

    Onimys, 17 Августа 2016

    Комментарии (3)
  9. SQL / Говнокод #20493

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    CREATE OR REPLACE PACKAGE BODY REPORT."PKG_COMMIT" 
    	IS
    	PROCEDURE P_COMMIT
    		IS
    	BEGIN
    		COMMIT;
    	END;
    END PKG_COMMIT;

    откопал чудный пакет

    Lokich, 08 Августа 2016

    Комментарии (5)
  10. SQL / Говнокод #20393

    +12

    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
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    SELECT
    real_day, 1 start_mon, TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE ('{date}','dd.mm.yyyy')),'dd')) end_mon,
    (CASE WHEN d.t1_aup_f IS NULL THEN (
      CASE WHEN (lag(sum(d.t1_aup_f),1) over (order by d.real_day)) IS NULL THEN (
       CASE WHEN (lag(sum(d.t1_aup_f),2) over (order by d.real_day)) IS NULL THEN (
        CASE WHEN (lag(sum(d.t1_aup_f),3) over (order by d.real_day)) IS NULL THEN (
         CASE WHEN (lag(sum(d.t1_aup_f),4) over (order by d.real_day)) IS NULL THEN (
          CASE WHEN (lag(sum(d.t1_aup_f),5) over (order by d.real_day)) IS NULL THEN (
           CASE WHEN (lag(sum(d.t1_aup_f),6) over (order by d.real_day)) IS NULL THEN (
            CASE WHEN (lag(sum(d.t1_aup_f),7) over (order by d.real_day)) IS NULL THEN (
             CASE WHEN (lag(sum(d.t1_aup_f),8) over (order by d.real_day)) IS NULL THEN (
              CASE WHEN (lag(sum(d.t1_aup_f),9) over (order by d.real_day)) IS NULL THEN (
               CASE WHEN (lag(sum(d.t1_aup_f),10) over (order by d.real_day)) IS NULL THEN (
                CASE WHEN (lag(sum(d.t1_aup_f),11) over (order by d.real_day)) IS NULL THEN (
                 CASE WHEN (lag(sum(d.t1_aup_f),12) over (order by d.real_day)) IS NULL THEN (
                  CASE WHEN (lag(sum(d.t1_aup_f),13) over (order by d.real_day)) IS NULL THEN (
                   CASE WHEN (lag(sum(d.t1_aup_f),14) over (order by d.real_day)) IS NULL THEN (
                    CASE WHEN (lag(sum(d.t1_aup_f),15) over (order by d.real_day)) IS NULL THEN (
                     CASE WHEN (lag(sum(d.t1_aup_f),16) over (order by d.real_day)) IS NULL THEN (
                      CASE WHEN (lag(sum(d.t1_aup_f),17) over (order by d.real_day)) IS NULL THEN (
                       CASE WHEN (lag(sum(d.t1_aup_f),18) over (order by d.real_day)) IS NULL THEN (
                        CASE WHEN (lag(sum(d.t1_aup_f),19) over (order by d.real_day)) IS NULL THEN (
                         CASE WHEN (lag(sum(d.t1_aup_f),20) over (order by d.real_day)) IS NULL THEN (
                          CASE WHEN (lag(sum(d.t1_aup_f),21) over (order by d.real_day)) IS NULL THEN (
                           CASE WHEN (lag(sum(d.t1_aup_f),22) over (order by d.real_day)) IS NULL THEN (
                            CASE WHEN (lag(sum(d.t1_aup_f),23) over (order by d.real_day)) IS NULL THEN (
                             CASE WHEN (lag(sum(d.t1_aup_f),24) over (order by d.real_day)) IS NULL THEN (
                              CASE WHEN (lag(sum(d.t1_aup_f),25) over (order by d.real_day)) IS NULL THEN (
                               CASE WHEN (lag(sum(d.t1_aup_f),26) over (order by d.real_day)) IS NULL THEN (
                                CASE WHEN (lag(sum(d.t1_aup_f),27) over (order by d.real_day)) IS NULL THEN (
                                 CASE WHEN (lag(sum(d.t1_aup_f),28) over (order by d.real_day)) IS NULL THEN (
                                  CASE WHEN (lag(sum(d.t1_aup_f),29) over (order by d.real_day)) IS NULL THEN
                                   lag(sum(d.t1_aup_f),30) over (order by d.real_day )
                                  ELSE (lag(sum(d.t1_aup_f),29) over (order by d.real_day)) END)
                                 ELSE (lag(sum(d.t1_aup_f),28) over (order by d.real_day)) END)
                                ELSE (lag(sum(d.t1_aup_f),27) over (order by d.real_day)) END)
                               ELSE (lag(sum(d.t1_aup_f),26) over (order by d.real_day)) END)
                              ELSE (lag(sum(d.t1_aup_f),25) over (order by d.real_day)) END)
                             ELSE (lag(sum(d.t1_aup_f),24) over (order by d.real_day)) END)
                            ELSE (lag(sum(d.t1_aup_f),23) over (order by d.real_day)) END)
                           ELSE (lag(sum(d.t1_aup_f),22) over (order by d.real_day)) END)
                          ELSE (lag(sum(d.t1_aup_f),21) over (order by d.real_day)) END)
                         ELSE (lag(sum(d.t1_aup_f),20) over (order by d.real_day)) END)
                        ELSE (lag(sum(d.t1_aup_f),19) over (order by d.real_day)) END)
                       ELSE (lag(sum(d.t1_aup_f),18) over (order by d.real_day)) END)
                      ELSE (lag(sum(d.t1_aup_f),17) over (order by d.real_day)) END)
                     ELSE (lag(sum(d.t1_aup_f),16) over (order by d.real_day)) END)
                    ELSE (lag(sum(d.t1_aup_f),15) over (order by d.real_day)) END)
                   ELSE (lag(sum(d.t1_aup_f),14) over (order by d.real_day)) END)
                  ELSE (lag(sum(d.t1_aup_f),13) over (order by d.real_day)) END)
                 ELSE (lag(sum(d.t1_aup_f),12) over (order by d.real_day)) END)
                ELSE (lag(sum(d.t1_aup_f),11) over (order by d.real_day)) END)
               ELSE (lag(sum(d.t1_aup_f),10) over (order by d.real_day)) END)
              ELSE (lag(sum(d.t1_aup_f),9) over (order by d.real_day)) END)
             ELSE (lag(sum(d.t1_aup_f),8) over (order by d.real_day)) END)
            ELSE (lag(sum(d.t1_aup_f),7) over (order by d.real_day)) END)
           ELSE (lag(sum(d.t1_aup_f),6) over (order by d.real_day)) END)
          ELSE (lag(sum(d.t1_aup_f),5) over (order by d.real_day)) END)
         ELSE (lag(sum(d.t1_aup_f),4) over (order by d.real_day)) END)
        ELSE (lag(sum(d.t1_aup_f),3) over (order by d.real_day)) END)
       ELSE (lag(sum(d.t1_aup_f),2) over (order by d.real_day)) END)
      ELSE (lag(sum(d.t1_aup_f),1) over (order by d.real_day)) END)
    ELSE d.t1_aup_f END) gf_1,
    ........

    Фул: http://paste.org.ru/?zlc3b8
    via https://habrahabr.ru/post/305926/#comment_9706606

    package, 19 Июля 2016

    Комментарии (9)