生成基本销售报告
Generating a basic sales report
即将完成仅使用 SQL 的报告生成。非常自豪,但我被卡住了,因为我知道我正在做一些很长的事情(SELECT 语句中的子查询)。
我正在尝试修复 jan2019_sales,因为它只是给我总销售额的总和,但我需要将其划分为 2019 年的部门销售额,但我知道子查询只能return 1 列,所以我不能同时列出 2019 年的部门和销售额。
处理这个简单的作品的最佳方法是什么???啊。我为我(坚信)是问题的部分创建了一个区域,其中有一种更简单的方法。这是我要修复的问题的图片(C 列):
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
这里的一个问题是您对内部 (2019) 和外部 (2020) 查询使用相同的别名。此外,内部查询返回多行,因为不同年份销售额的部门没有联接。
在您的 2019 年销售查询(内部查询)中,您必须将该部门加入到您的外部查询 (2020) 部门。您可能希望为查询设置不同的别名,以便您可以引用外部查询。
将您的内部查询别名更改为 t3
和 t4
。然后在您的内部查询 Where
子句中。添加,t2.new_division = t4.new_division
。
即将完成仅使用 SQL 的报告生成。非常自豪,但我被卡住了,因为我知道我正在做一些很长的事情(SELECT 语句中的子查询)。
我正在尝试修复 jan2019_sales,因为它只是给我总销售额的总和,但我需要将其划分为 2019 年的部门销售额,但我知道子查询只能return 1 列,所以我不能同时列出 2019 年的部门和销售额。
处理这个简单的作品的最佳方法是什么???啊。我为我(坚信)是问题的部分创建了一个区域,其中有一种更简单的方法。这是我要修复的问题的图片(C 列):
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
这里的一个问题是您对内部 (2019) 和外部 (2020) 查询使用相同的别名。此外,内部查询返回多行,因为不同年份销售额的部门没有联接。
在您的 2019 年销售查询(内部查询)中,您必须将该部门加入到您的外部查询 (2020) 部门。您可能希望为查询设置不同的别名,以便您可以引用外部查询。
将您的内部查询别名更改为 t3
和 t4
。然后在您的内部查询 Where
子句中。添加,t2.new_division = t4.new_division
。