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

    −134

    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
    SELECT     ISNULL(SUM(dbo.colors.setup_time_base + dbo.colors.setup_time_add), 0) AS setup_time, ISNULL(SUM(dbo.colors.setup_time_base), 0) AS setup_time_base, 
                          ISNULL(SUM(dbo.colors.setup_time_add), 0) AS setup_time_add, ISNULL(SUM(dbo.colors.setup_length_base), 0) + 40 AS setup_lenght_base, 
                          ISNULL(SUM(dbo.colors.setup_lenght_add), 0) AS setup_lenght_add, ISNULL(SUM(dbo.colors.setup_length_base + dbo.colors.setup_lenght_add), 0) 
                          + 40 AS setup_lenght, ISNULL(COUNT(dbo.dir_order_sections.color_id), 0) AS section_count, CASE WHEN COUNT(dbo.dir_order_sections.color_id) 
                          = 0 THEN 0.5 WHEN COUNT(dbo.dir_order_sections.color_id) >= 1 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 2 THEN 0.65 WHEN COUNT(dbo.dir_order_sections.color_id) >= 3 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 6 THEN 1 WHEN COUNT(dbo.dir_order_sections.color_id) >= 7 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 10 THEN 1.15 WHEN COUNT(dbo.dir_order_sections.color_id) >= 11 THEN 1.3 ELSE 0 END AS section_rate, CASE WHEN COUNT(dbo.dir_order_sections.color_id) 
                          = 0 THEN 0.03 WHEN COUNT(dbo.dir_order_sections.color_id) >= 1 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 2 THEN 0.04 WHEN COUNT(dbo.dir_order_sections.color_id) >= 3 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 7 THEN 0.05 WHEN COUNT(dbo.dir_order_sections.color_id) >= 8 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 10 THEN 0.07 WHEN COUNT(dbo.dir_order_sections.color_id) >= 11 THEN 0.07 ELSE 0 END AS role_rate, CASE WHEN COUNT(dbo.dir_order_sections.color_id) 
                          = 0 THEN 0.03 WHEN COUNT(dbo.dir_order_sections.color_id) >= 1 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 2 THEN 0.04 WHEN COUNT(dbo.dir_order_sections.color_id) >= 3 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 7 THEN 0.05 WHEN COUNT(dbo.dir_order_sections.color_id) >= 8 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 10 THEN 0.07 WHEN COUNT(dbo.dir_order_sections.color_id) >= 11 THEN 0.07 ELSE 0 END AS role_shift_rate_base, ISNULL(SUM(dbo.colors.role_shift_rate_add), 
                          0) + CASE WHEN COUNT(dbo.dir_order_sections.color_id) = 0 THEN 0.03 WHEN COUNT(dbo.dir_order_sections.color_id) >= 1 AND 
                          COUNT(dbo.dir_order_sections.color_id) <= 2 THEN 0.04 WHEN COUNT(dbo.dir_order_sections.color_id) >= 3 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 7 THEN 0.05 WHEN COUNT(dbo.dir_order_sections.color_id) >= 8 AND COUNT(dbo.dir_order_sections.color_id) 
                          <= 9 THEN 0.06 WHEN COUNT(dbo.dir_order_sections.color_id) >= 10 THEN 0.07 ELSE 0 END AS role_shift_rate, dbo.orders.order_n
    FROM         dbo.orders LEFT OUTER JOIN
                          dbo.dir_order_sections ON dbo.dir_order_sections.order_n = dbo.orders.order_n AND dbo.dir_order_sections.color_id <> 0 AND 
                          dbo.dir_order_sections.color_id IS NOT NULL LEFT OUTER JOIN
                          dbo.colors ON dbo.dir_order_sections.color_id = dbo.colors.color_id
    GROUP BY dbo.orders.order_n

    Запостил: someone, 15 Июля 2012

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

    • Охтыж. Отличное форматирование.
      Ответить
      • Были бы поля покороче названы - можно было бы причесать под прямоугольник ;)
        Ответить
        • можно пробелами добить до прямоугольника, где-то мы обсуждали автовыравнивание
          Ответить
          • Да вот неплотно будет из-за длинных имен, а \ как в си поюзать нельзя.
            Ответить
    • В общем, немного контекста:

      Это приложение WinForms с многолетней историей, прикрученное к жутко ынтырпрайзной базе MSSQL на 280 таблиц и 160 вью.

      Половина всей расчётной логики запихана в stored-процедуры и вот такие вот простыни-вью. В итоге, чтобы выполнить расчёт, приложение подцепляется к базе и передаёт ей параметры расчёта.

      Половину кода на C# тоже можно на ГК отправлять. В общем, стандартно для такого вот динозавра, разросшегося органически за годы.
      Ответить

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