СУММА СЧЕТА только с определенными переменными - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть запрос ниже, который возвращает результаты, но мне нужно, чтобы некоторые переменные были исключены из столбца fill_orders.

Весь запрос:

SELECT
    order_date,
    p_category,
    issue_group,
    srt_level,
    order_count,
    filled_orders,
    total_orders,
    round(100 *(order_count / total_orders), 1) AS monthly_metric
FROM
    (
        SELECT
            order_date,
            p_category,
            issue_group,
            srt_level,
            order_count,
            CASE
                WHEN srt_level = '80'  THEN order_count
                WHEN srt_level = '100' THEN SUM(order_count) OVER(
                    PARTITION BY order_date, issue_group, p_category
                )
            END AS filled_orders,
            total_orders
        FROM
            (
                SELECT
                    order_date,
                    p_category,
                    issue_group,
                    srt_level,
                    order_count,
                    SUM(order_count) OVER(
                        PARTITION BY order_date, issue_group, p_category
                    ) AS total_orders
                FROM
                    (
                        SELECT
                            order_date,
                            p_category,
                            CASE
                                WHEN ( issue_grp = 1 ) THEN '1'
                                ELSE '2/3 '
                            END AS issue_group,
                            srt   AS srt_level,
                            COUNT(*) AS order_count
                        FROM
                            database.tcon_mv
                        WHERE
                            order_date IN (
                                '201803'
                            )
                        GROUP BY
                            p_category,
                            CASE
                                WHEN ( issue_grp = 1 ) THEN '1'
                                ELSE '2/3 '
                            END,
                            srt,
                            order_date
                    )
            )
    )
ORDER BY
    order_date,
    p_category,
    issue_group

Часть, дающая мне«Issues»:

... SELECT
                order_date,
                p_category,
                issue_group,
                srt_level,
                order_count,
                CASE
                    WHEN srt_level = '80'  THEN order_count
                    WHEN srt_level = '100' THEN SUM(order_count) OVER(
                        PARTITION BY order_date, issue_group, p_category
                    )
                END AS filled_orders,
                total_orders
            FROM ....

srt_level - это столбец varchar, который имеет только 3 параметра в качестве результатов (80, 100 и Поздний).Когда srt_level = '100', мне нужно, чтобы счетчик включал только сумму строк в 80 и 100.

Вид того, что возвращается полным запросом, с ожидаемыми результатами, написанными красным.

enter image description here

1 Ответ

0 голосов
/ 13 декабря 2018

Я предполагаю, что вы хотите суммировать только order_count значения, где srt_level не равно Late.Тогда скажи, что в твоем sum:

SELECT
    order_date,
    p_category,
    issue_group,
    srt_level,
    order_count,
    CASE
        WHEN srt_level = '80'  THEN order_count
        WHEN srt_level = '100' THEN 
            SUM(CASE WHEN srt_level != 'Late' THEN order_count END) OVER(
               PARTITION BY order_date, issue_group, p_category
            )
    END AS filled_orders,
    total_orders
FROM ....
...