Генерация базового c отчета о продажах - PullRequest
0 голосов
/ 14 февраля 2020

Так близко к окончанию sh создание отчета с использованием только SQL. Очень горд, но я застрял, потому что я знаю, что делаю что-то долгий путь (подзапрос в операторе SELECT).

Я пытаюсь исправить jan2019_sales, потому что он просто дает мне сумму продаж в целом, но мне нужно, чтобы она была разделена на дивизионные продажи за 2019 год, но я знаю, что подзапрос может вернуть только 1 столбец так что у меня не может быть и подразделения, и продажи на 2019 год.

Какой лучший способ справиться с этим простым произведением ??? Тьфу. Я сделал регион для той части, в которой (я твердо верю) проблема, в которой есть гораздо более легкий путь. Вот изображение того, что я пытаюсь исправить (столбец C):

What report looks like rn

SELECT
    t2.new_division AS division,
    SUM(extended_amount) AS jan2020_sales,
-- region
    ((SELECT
    t2.new_division AS division,
    SUM(extended_amount)
FROM 
    mdwh.us_raw.l_dmw_order_report t1 INNER JOIN item_master_zs t2 ON SUBSTRING(t1.upc,1,6) = t2.item_code
WHERE 
    quantity_ordered > 0
    AND UPPER(line_status) NOT IN ('','RETURN', 'CANCELLED')
    AND UPPER(item_description_1) NOT IN ('','FREIGHT', 'RETURN LABEL FEE', 'VISIBLE STITCH')
    AND (quantity_ordered * unit_price_amount) > 0
    AND oms_order_date BETWEEN '2019-01-01' AND '2019-01-31'
GROUP BY
    division
ORDER BY
    division)) AS jan2019_sales,
-- endregion
    ROUND((jan2020_sales / jan2019_sales * 100)) || '%' AS pct_change
FROM 
    mdwh.us_raw.l_dmw_order_report t1 INNER JOIN item_master_zs t2 ON SUBSTRING(t1.upc,1,6) = t2.item_code
WHERE 
    quantity_ordered > 0
    AND UPPER(line_status) NOT IN ('','RETURN', 'CANCELLED')
    AND UPPER(item_description_1) NOT IN ('','FREIGHT', 'RETURN LABEL FEE', 'VISIBLE STITCH')
    AND (quantity_ordered * unit_price_amount) > 0
    AND oms_order_date BETWEEN '2020-01-01' AND '2020-01-31'
    AND t2.new_division BETWEEN '11' AND '38'
GROUP BY 
    division
ORDER BY 
    division

1 Ответ

1 голос
/ 18 февраля 2020

Одна из проблем заключается в том, что у вас одинаковый псевдоним как для внутренних (2019), так и для внешних (2020) запросов. Кроме того, внутренний запрос возвращает несколько строк, потому что нет объединения в подразделении для продаж за разные годы.

В вашем запросе на продажу 2019 года (внутренний запрос) необходимо, чтобы это подразделение было присоединено к внешнему запросу. (2020) разделение. Возможно, вы захотите присвоить псевдонимы запросам по-другому, чтобы вы могли ссылаться на внешний запрос.

Измените псевдоним внутреннего запроса 'на t3 и t4. Тогда в вашем внутреннем запросе Where предложение. Добавить, t2.new_division = t4.new_division.

...