diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/1.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/1.png new file mode 100644 index 0000000..7b30410 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/1.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/10.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/10.png new file mode 100644 index 0000000..5d0c74b Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/10.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/11.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/11.png new file mode 100644 index 0000000..296b958 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/11.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/12.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/12.png new file mode 100644 index 0000000..6759eae Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/12.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/2.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/2.png new file mode 100644 index 0000000..c745040 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/2.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/3.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/3.png new file mode 100644 index 0000000..f25f4f5 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/3.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/4.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/4.png new file mode 100644 index 0000000..9ad22be Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/4.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/5.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/5.png new file mode 100644 index 0000000..a6d5bd4 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/5.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/6.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/6.png new file mode 100644 index 0000000..b4ae4b2 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/6.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/7.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/7.png new file mode 100644 index 0000000..73306d5 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/7.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/8.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/8.png new file mode 100644 index 0000000..214fd25 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/8.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/9.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/9.png new file mode 100644 index 0000000..f20a34b Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/建表过程/9.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.1-1.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.1-1.png new file mode 100644 index 0000000..d95d7d9 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.1-1.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.1-2.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.1-2.png new file mode 100644 index 0000000..4915514 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.1-2.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.10.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.10.png new file mode 100644 index 0000000..f79619c Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.10.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.2-1.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.2-1.png new file mode 100644 index 0000000..0ce23e7 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.2-1.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.2-2.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.2-2.png new file mode 100644 index 0000000..69630ff Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.2-2.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.3.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.3.png new file mode 100644 index 0000000..cbe6726 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.3.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.4.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.4.png new file mode 100644 index 0000000..d216d0f Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.4.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.5.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.5.png new file mode 100644 index 0000000..11e1e03 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.5.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.6.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.6.png new file mode 100644 index 0000000..80c26b9 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.6.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.7.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.7.png new file mode 100644 index 0000000..364a15e Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.7.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.8-1.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.8-1.png new file mode 100644 index 0000000..81b8f2a Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.8-1.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.8-2.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.8-2.png new file mode 100644 index 0000000..ae4520e Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.8-2.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.9.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.9.png new file mode 100644 index 0000000..1406b07 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/1.9.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.0.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.0.png new file mode 100644 index 0000000..8a3aad6 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.0.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.1.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.1.png new file mode 100644 index 0000000..2ea9889 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.1.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.2.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.2.png new file mode 100644 index 0000000..eb7a66f Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/2.2.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.1.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.1.png new file mode 100644 index 0000000..096abb3 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.1.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.2.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.2.png new file mode 100644 index 0000000..3b27d3a Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.2.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.3.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.3.png new file mode 100644 index 0000000..02f2359 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.3.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.4.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.4.png new file mode 100644 index 0000000..6e740d7 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/3.4.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.1.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.1.png new file mode 100644 index 0000000..5cfab4e Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.1.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.2-1.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.2-1.png new file mode 100644 index 0000000..170a237 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.2-1.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.2-2.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.2-2.png new file mode 100644 index 0000000..14e3bdc Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.2-2.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.3.png b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.3.png new file mode 100644 index 0000000..0987676 Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-02 数据处理过程/线下/数据导入/4.3.png differ diff --git a/底稿/附件/1 执行截图/CAATS-01-03 数据质量评估/线下零售金额核对/2022-202506.png b/底稿/附件/1 执行截图/CAATS-01-03 数据质量评估/线下零售金额核对/2022-202506.png new file mode 100644 index 0000000..b8a93ed Binary files /dev/null and b/底稿/附件/1 执行截图/CAATS-01-03 数据质量评估/线下零售金额核对/2022-202506.png differ diff --git a/底稿/附件/2 执行SQL/CAATS-01-02 数据处理过程-线下.txt b/底稿/附件/2 执行SQL/CAATS-01-02 数据处理过程-线下.txt index e69de29..5e70cc0 100644 --- a/底稿/附件/2 执行SQL/CAATS-01-02 数据处理过程-线下.txt +++ b/底稿/附件/2 执行SQL/CAATS-01-02 数据处理过程-线下.txt @@ -0,0 +1,1722 @@ +-- 一、建表 +----------------------------------- +-- 1 创建自定义(国内)门店销售 +----------------------------------- +DROP TABLE IF EXISTS audit_bi_pro.custom_offline_sale_return_local; +CREATE TABLE audit_bi_pro.custom_offline_sale_return_local +( + `source_system` String COMMENT '来源系统', + `sale_date` String COMMENT '销售日期', + `brand_code` String COMMENT '品牌编码', + `sale_time` Datetime('Asia/Shanghai') COMMENT '销售时间', + `store_code` String COMMENT '门店编码', + `store_name` String COMMENT '门店名称', + `receipt_no` String COMMENT '小票号', + `goods_amt` Decimal(18,2) COMMENT '商品金额', + `barcode` String COMMENT '条码', + `goods_name` String COMMENT '商品名称', + `qty` Int64 COMMENT '数量', + `price` Decimal(18,2) COMMENT '单价', + `pay_type` String COMMENT '收银方式', + `source_bill_no` String COMMENT '原单据号', + `sale_status` String COMMENT '销售状态' +)ENGINE = ReplicatedMergeTree('/clickhouse/tables/audit_bi_pro/custom_offline_sale_return_local/{shard}', + '{replica}') +PARTITION BY toYYYYMM(toDate(sale_date)) +ORDER BY receipt_no +SETTINGS index_granularity = 8192 +COMMENT '自定义门店销售'; + +----------------------------------- +-- 2 创建海一家订单号关联关系中间表 +----------------------------------- +DROP TABLE IF EXISTS audit_bi_pro.custom_offline_receipt_BES_local; +CREATE TABLE audit_bi_pro.custom_offline_receipt_BES_local( + receipt_no String COMMENT '现单号', + source_bill_no String COMMENT '来源订单号', + lv Int64 COMMENT '关联层级' +) +ENGINE = ReplicatedMergeTree('/clickhouse/tables/audit_bi_pro/custom_offline_receipt_BES_local/{shard}', + '{replica}') +ORDER BY receipt_no +SETTINGS index_granularity = 8192 +COMMENT '海一家小票号关联关系'; + +----------------------------------- +-- 3 创建自定义海外门店销售表 +----------------------------------- +DROP TABLE IF EXISTS audit_bi_pro.custom_offline_abroad_sale_return_local; +CREATE TABLE audit_bi_pro.custom_offline_abroad_sale_return_local +( + `source_system` String COMMENT '来源系统', + `sale_date` String COMMENT '销售日期', + `brand_code` String COMMENT '品牌编码', + `sale_time` Datetime('Asia/Shanghai') COMMENT '销售时间', + `store_code` String COMMENT '门店编码', + `store_name` String COMMENT '门店名称', + `receipt_no` String COMMENT '小票号', + `goods_amt` Decimal(18,2) COMMENT '商品金额', + `barcode` String COMMENT '条码', + `goods_name` String COMMENT '商品名称', + `qty` Int64 COMMENT '数量', + `price` Decimal(18,2) COMMENT '单价', + `pay_type` String COMMENT '收银方式', + `source_bill_no` String COMMENT '原单据号', + `sale_status` String COMMENT '销售状态' +)ENGINE = ReplicatedMergeTree('/clickhouse/tables/audit_bi_pro/custom_offline_abroad_sale_return_local/{shard}', + '{replica}') +PARTITION BY toYYYYMM(toDate(sale_date)) +ORDER BY receipt_no +SETTINGS index_granularity = 8192 +COMMENT '自定义海外门店销售'; + +----------------------------------- +-- 4 创建汇率表 +----------------------------------- +DROP TABLE IF EXISTS audit_bi_pro.custom_exchange_rate_local; +CREATE TABLE audit_bi_pro.custom_exchange_rate_local +( + `rate_date` Date COMMENT '日期', + `currency` String COMMENT '货币', + `exchange_rate` Decimal(10,6) COMMENT '兑人名币汇率' +) +ENGINE = Log +COMMENT '汇率表'; + +----------------------------------- +-- 5 创建自定义门店主数据汇总表 +----------------------------------- +DROP TABLE IF EXISTS audit_bi_pro.custom_store_info_all_local; +CREATE TABLE audit_bi_pro.custom_store_info_all_local +( + `brand_code` String COMMENT '品牌编码', + `store_code` String COMMENT '门店编码', + `store_name` String COMMENT '门店名称', + `store_nature` String COMMENT '门店性质(描述)', + `open_date` String COMMENT '开店时间', + `close_date` String COMMENT '关店时间', + `country` String COMMENT '国家(描述)', + `province` String COMMENT '省份(描述)', + `city` String COMMENT '城市(地级市)(描述)', + `store_status` String COMMENT '门店状态(描述)', + `period` String COMMENT '会计期间', + `source_table` String COMMENT '来源表' +)ENGINE = ReplicatedMergeTree('/clickhouse/tables/audit_bi_pro/custom_store_info_all_local/{shard}', + '{replica}') +ORDER BY store_code +COMMENT '自定义门店主数据汇总表' + +----------------------------------- +-- 6 创建自定义门店性质汇总表 +----------------------------------- +DROP TABLE IF EXISTS audit_bi_pro.custom_store_nature_all_local; +CREATE TABLE audit_bi_pro.custom_store_nature_all_local +( + `brand_code` String COMMENT '品牌编码', + `store_code` String COMMENT '门店编码', + `store_name` String COMMENT '门店名称', + `store_nature` String COMMENT '门店性质(描述)', + `open_date` String COMMENT '开店时间', + `close_date` String COMMENT '关店时间', + `country` String COMMENT '国家(描述)', + `province` String COMMENT '省份(描述)', + `city` String COMMENT '城市(地级市)(描述)', + `store_status` String COMMENT '门店状态(描述)', + `year` String COMMENT '年份', + `source_table` String COMMENT '来源表' +)ENGINE = ReplicatedMergeTree('/clickhouse/tables/audit_bi_pro/custom_store_nature_all_local/{shard}', + '{replica}') +ORDER BY store_code +COMMENT '自定义门店性质汇总表' + + +-- 7 创建线下城市表 +DROP TABLE IF EXISTS audit_bi_pro.custom_offline_region_city_local; +CREATE TABLE audit_bi_pro.custom_offline_region_city_local +( + `region` String COMMENT '地区', + `city` String COMMENT '城市' +)ENGINE =Log; + +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_region_city_local; + +-- 8 创建SBZ新老系统店铺对应表 +DROP TABLE IF EXISTS audit_bi_pro.custom_offline_sbz_store_old_new; +CREATE TABLE audit_bi_pro.custom_offline_sbz_store_old_new +( + `old_store_code` String COMMENT '老系统店铺编码', + `old_store_name` String COMMENT '老系统店铺名称', + `store_code` String COMMENT '店铺编码', + `store_name` String COMMENT '店铺名称' +)ENGINE =Log; + + +-- 9 创建SBZ老系统销售数据表 +DROP TABLE IF EXISTS audit_bi_pro.custom_offline_sbz_old_system; +CREATE TABLE audit_bi_pro.custom_offline_sbz_old_system +( + `source_system` String COMMENT '来源系统', + `sale_date` String COMMENT '销售日期', + `brand_code` String COMMENT '品牌编码', + `sale_time` String COMMENT '销售时间', + `store_code` String COMMENT '门店编码', + `store_name` String COMMENT '门店名称', + `receipt_no` String COMMENT '小票号', + `goods_amt` Decimal(18,2) COMMENT '商品金额', + `barcode` String COMMENT '条码', + `goods_name` String COMMENT '商品名称', + `qty` Int64 COMMENT '数量', + `price` Decimal(18,2) COMMENT '单价', + `pay_type` String COMMENT '收银方式', + `source_bill_no` String COMMENT '原单据号' +)ENGINE = ReplicatedMergeTree('/clickhouse/tables/audit_bi_pro/custom_offline_sbz_old_system/{shard}', + '{replica}') +PARTITION BY toYYYYMM(toDate(sale_date)) +ORDER BY receipt_no +SETTINGS index_granularity = 8192 +COMMENT '自定义斯搏兹老系统销售表'; + + +------------------------------- +-- 10 自定义门店销售结算表 +------------------------------- +-- 国内 +DROP TABLE IF EXISTS audit_bi_pro.custom_offline_sale_return_settle_local; +CREATE TABLE audit_bi_pro.custom_offline_sale_return_settle_local +( + `source_system` String COMMENT '来源系统', + `sale_date` String COMMENT '销售日期', + `brand_code` String COMMENT '品牌编码', + `sale_time` Datetime('Asia/Shanghai') COMMENT '销售时间', + `store_code` String COMMENT '门店编码', + `store_name` String COMMENT '门店名称', + `receipt_no` String COMMENT '小票号', + `goods_amt` Decimal(18,2) COMMENT '商品金额', + `barcode` String COMMENT '条码', + `goods_name` String COMMENT '商品名称', + `qty` Int64 COMMENT '数量', + `price` Decimal(18,2) COMMENT '单价', + `pay_type` String COMMENT '收银方式', + `source_bill_no` String COMMENT '原单据号', + `sale_status` String COMMENT '销售状态', + `store_nature` String COMMENT '门店性质', + `settle_ratio` Decimal(18,4)COMMENT '结算比例' +)ENGINE = ReplicatedMergeTree('/clickhouse/tables/audit_bi_pro/custom_offline_sale_return_settle_local/{shard}', + '{replica}') +PARTITION BY toYYYYMM(toDate(sale_date)) +ORDER BY receipt_no +SETTINGS index_granularity = 8192 +COMMENT '自定义国内门店销售结算表'; + + +--海外 +DROP TABLE IF EXISTS audit_bi_pro.custom_offline_abroad_sale_return_settle_local; +CREATE TABLE audit_bi_pro.custom_offline_abroad_sale_return_settle_local +( + `source_system` String COMMENT '来源系统', + `sale_date` String COMMENT '销售日期', + `brand_code` String COMMENT '品牌编码', + `sale_time` Datetime('Asia/Shanghai') COMMENT '销售时间', + `store_code` String COMMENT '门店编码', + `store_name` String COMMENT '门店名称', + `receipt_no` String COMMENT '小票号', + `goods_amt` Decimal(18,2) COMMENT '商品金额', + `barcode` String COMMENT '条码', + `goods_name` String COMMENT '商品名称', + `qty` Int64 COMMENT '数量', + `price` Decimal(18,2) COMMENT '单价', + `pay_type` String COMMENT '收银方式', + `source_bill_no` String COMMENT '原单据号', + `sale_status` String COMMENT '销售状态', + `store_nature` String COMMENT '门店性质', + `settle_ratio` Decimal(18,4)COMMENT '结算比例' +)ENGINE = ReplicatedMergeTree('/clickhouse/tables/audit_bi_pro/custom_offline_abroad_sale_return_settle_local/{shard}', + '{replica}') +PARTITION BY toYYYYMM(toDate(sale_date)) +ORDER BY receipt_no +SETTINGS index_granularity = 8192 +COMMENT '自定义海外门店销售结算表'; + + +----------------------------------- +-- 创建结算比例表 +----------------------------------- +DROP TABLE IF EXISTS audit_bi_pro.custom_settle_ratio_local; +CREATE TABLE audit_bi_pro.custom_settle_ratio_local +( + `settle_year` String COMMENT '年份', + `store_nature` String COMMENT '门店性质', + `settle_ratio` Decimal(18,4) COMMENT '结算比例' +) +ENGINE = Log +COMMENT '结算比例表'; + +-- 二、插入数据 +----------------------------------- +-- 1 插入国内数据 +-- 1.1 插入非海一家、非男生女生销售、退款数据 +-- 2022-2023 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_sale_return_local; +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2022-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2024-01-01 00:00:00' + AND brand_code NOT IN ('BES','NCL') + AND barcode NOT IN ('3303000001','3303000002','3303000003','3303000004','3303000007','3303000008','3303000009','3303000010','3303000011', + '3303000012','3303004000000','3303004000001','3303004000002','1303000154','1303000085','1303000083','1303000084','1303000156') +GROUP BY store_code,receipt_no +HAVING status IN('销售','单赠品销售','优惠销售','退款','单赠品退款','优惠退款')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN b.status = '销售' THEN a.receipt_no + WHEN b.status = '退款' AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + b.status +FROM( + SELECT + *, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm + WHERE CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) + AND barcode NOT IN ('3303000001','3303000002','3303000003','3303000004','3303000007','3303000008','3303000009','3303000010','3303000011', + '3303000012','3303004000000','3303004000001','3303004000002','1303000154','1303000085','1303000083','1303000084','1303000156') +) a +LEFT JOIN( + SELECT + store_code, + CASE + WHEN status IN('销售','单赠品销售','优惠销售') THEN '销售' + WHEN status IN('退款','单赠品退款','优惠退款') THEN '退款' + END AS status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no; + +----------------------------------- +-- 1 插入国内数据 +-- 1.1 插入非海一家、非男生女生销售、退款数据 +-- 2024-2025 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_sale_return_local; +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2024-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code NOT IN ('BES','NCL') + AND barcode NOT IN ('3303000001','3303000002','3303000003','3303000004','3303000007','3303000008','3303000009','3303000010','3303000011', + '3303000012','3303004000000','3303004000001','3303004000002','1303000154','1303000085','1303000083','1303000084','1303000156') +GROUP BY store_code,receipt_no +HAVING status IN('销售','单赠品销售','优惠销售','退款','单赠品退款','优惠退款')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN b.status = '销售' THEN a.receipt_no + WHEN b.status = '退款' AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + b.status +FROM( + SELECT + *, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm + WHERE CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) + AND barcode NOT IN ('3303000001','3303000002','3303000003','3303000004','3303000007','3303000008','3303000009','3303000010','3303000011', + '3303000012','3303004000000','3303004000001','3303004000002','1303000154','1303000085','1303000083','1303000084','1303000156') +) a +LEFT JOIN( + SELECT + store_code, + CASE + WHEN status IN('销售','单赠品销售','优惠销售') THEN '销售' + WHEN status IN('退款','单赠品退款','优惠退款') THEN '退款' + END AS status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no; + +----------------------------------- +-- 1 插入国内数据 +-- 1.2 插入非海一家, 非男生女生换货数据 +-- 2022-2023 +----------------------------------- +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2022-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2024-01-01 00:00:00' + AND brand_code NOT IN ('BES','NCL') + AND barcode NOT IN ('3303000001','3303000002','3303000003','3303000004','3303000007','3303000008','3303000009','3303000010','3303000011', + '3303000012','3303004000000','3303004000001','3303004000002','1303000154','1303000085','1303000083','1303000084','1303000156') +GROUP BY store_code,receipt_no +HAVING status IN('换货销售','换货')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN (a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0)) AND a.source_bill_no <> '' THEN a.source_bill_no + WHEN ((a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 and a.goods_amt > 0)) AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + CASE + WHEN a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0) THEN '销售' + WHEN (a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 AND a.goods_amt > 0) THEN '退款' + END AS status +FROM( + SELECT + *, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm + WHERE CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) + AND barcode NOT IN ('3303000001','3303000002','3303000003','3303000004','3303000007','3303000008','3303000009','3303000010','3303000011', + '3303000012','3303004000000','3303004000001','3303004000002','1303000154','1303000085','1303000083','1303000084','1303000156') +) a +LEFT JOIN( + SELECT + store_code, + status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no; + +----------------------------------- +-- 1 插入国内数据 +-- 1.2 插入非海一家, 非男生女生换货数据 +-- 2024-2025 +----------------------------------- +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2024-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code NOT IN ('BES','NCL') + AND barcode NOT IN ('3303000001','3303000002','3303000003','3303000004','3303000007','3303000008','3303000009','3303000010','3303000011', + '3303000012','3303004000000','3303004000001','3303004000002','1303000154','1303000085','1303000083','1303000084','1303000156') +GROUP BY store_code,receipt_no +HAVING status IN('换货销售','换货')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN (a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0)) AND a.source_bill_no <> '' THEN a.source_bill_no + WHEN ((a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 and a.goods_amt > 0)) AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + CASE + WHEN a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0) THEN '销售' + WHEN (a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 AND a.goods_amt > 0) THEN '退款' + END AS status +FROM( + SELECT + *, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm + WHERE CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) + AND barcode NOT IN ('3303000001','3303000002','3303000003','3303000004','3303000007','3303000008','3303000009','3303000010','3303000011', + '3303000012','3303004000000','3303004000001','3303004000002','1303000154','1303000085','1303000083','1303000084','1303000156') +) a +LEFT JOIN( + SELECT + store_code, + status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no; + +----------------------------------- +-- 1 插入国内数据 +-- 1.3 插入海一家关联关系表数据 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_receipt_BES_local; +INSERT INTO audit_bi_pro.custom_offline_receipt_BES_local +WITH order_chain AS ( + SELECT + DISTINCT receipt_no, + source_bill_no + FROM + dwd_trade_hkaudit_shop_receipt_mt + WHERE brand_code = 'BES' +) +SELECT + l0.receipt_no as receipt_no, + multiIf( + l7.receipt_no <>'',l7.receipt_no, + l6.receipt_no <>'',l6.receipt_no, + l5.receipt_no <>'',l5.receipt_no, + l4.receipt_no <>'',l4.receipt_no, + l3.receipt_no <>'',l3.receipt_no, -- 第三级的原始单号 + l2.receipt_no <>'',l2.receipt_no, -- 第二级的原始单号 + l1.receipt_no <>'',l1.receipt_no, -- 第一级的原始单号 + l0.receipt_no -- 自己就是原始单号 + ) as source_bill_no, + CASE + when l7.receipt_no <>'' then 7 + when l6.receipt_no <>'' then 6 + when l5.receipt_no <>'' then 5 + when l4.receipt_no <>'' then 4 + when l3.receipt_no <>'' then 3 + when l2.receipt_no <>'' then 2 + when l1.receipt_no <>'' then 1 + else 0 + end as lv +FROM + order_chain l0 +LEFT JOIN + order_chain l1 +ON l1.receipt_no = l0.source_bill_no +LEFT JOIN + order_chain l2 +ON l2.receipt_no = l1.source_bill_no +LEFT JOIN + order_chain l3 +ON l3.receipt_no = l2.source_bill_no +LEFT JOIN + order_chain l4 +ON l4.receipt_no = l3.source_bill_no +LEFT JOIN + order_chain l5 +ON l5.receipt_no = l4.source_bill_no +LEFT JOIN + order_chain l6 +ON l6.receipt_no = l5.source_bill_no +LEFT JOIN + order_chain l7 +ON l7.receipt_no = l6.source_bill_no +WHERE lv <> 7 AND lv <> 0 + +----------------------------------- +-- 1 插入国内数据 +-- 1.4 插入海一家销售、退款数据 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_sale_return_local; +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2022-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code ='BES' +GROUP BY store_code,receipt_no +HAVING status IN('销售','单赠品销售','优惠销售','退款','单赠品退款','优惠退款')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN b.status = '销售' THEN a.receipt_no + WHEN b.status = '退款' AND c.source_bill_no <> '' THEN c.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + c.source_bill_no, + b.status +FROM( + SELECT + *, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm + WHERE CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) +) a +LEFT JOIN( + SELECT + store_code, + CASE + WHEN status IN('销售','单赠品销售','优惠销售') THEN '销售' + WHEN status IN('退款','单赠品退款','优惠退款') THEN '退款' + END AS status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no +LEFT JOIN( + SELECT + receipt_no, + source_bill_no + FROM custom_offline_receipt_BES_local corbl + WHERE lv <> 0 +)c +ON a.receipt_no = c.receipt_no; + +----------------------------------- +-- 1 插入国内数据 +-- 1.5 插入海一家换货销售数据 +----------------------------------- +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2022-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code ='BES' +GROUP BY store_code,receipt_no +HAVING status IN ('换货销售','换货')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN (a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0)) AND c.source_bill_no <> '' THEN c.source_bill_no + WHEN ((a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 and a.goods_amt > 0)) AND c.source_bill_no <> '' THEN c.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + c.source_bill_no, + CASE + WHEN a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0) THEN '销售' + WHEN (a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 AND a.goods_amt > 0) THEN '退款' + END AS status +FROM( + SELECT + *, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm + WHERE CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) +) a +LEFT JOIN( + SELECT + store_code, + status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no +LEFT JOIN( + SELECT + receipt_no, + source_bill_no + FROM custom_offline_receipt_BES_local corbl + WHERE lv <> 0 +)c +ON a.receipt_no = c.receipt_no; + +----------------------------------- +-- 1 插入国内数据 +-- 1.6 插入男生女生销售、退款数据 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_sale_return_local; + +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2022-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code = 'NCL' + AND receipt_no NOT IN ('99N1LQ2305060003','99N0YU2304070005','99N1LQ2305100004','99N0YU2304100002') + OR (receipt_no IN('99N1LQ2305060003','99N0YU2304070005') AND goods_amt >0 AND qty>0) + OR (receipt_no IN('99N1LQ2305100004','99N0YU2304100002') AND goods_amt <0 AND qty<0) +GROUP BY store_code,receipt_no +HAVING status IN('销售','单赠品销售','优惠销售','退款','单赠品退款','优惠退款')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN b.status = '销售' THEN a.receipt_no + WHEN b.status = '退款' AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + b.status +FROM( + SELECT + *, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm + WHERE CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) + AND receipt_no NOT IN ('99N1LQ2305060003','99N0YU2304070005','99N1LQ2305100004','99N0YU2304100002') + OR (receipt_no IN('99N1LQ2305060003','99N0YU2304070005') AND goods_amt >0 AND qty>0) + OR (receipt_no IN('99N1LQ2305100004','99N0YU2304100002') AND goods_amt <0 AND qty<0) +) a +LEFT JOIN( + SELECT + store_code, + CASE + WHEN status IN('销售','单赠品销售','优惠销售') THEN '销售' + WHEN status IN('退款','单赠品退款','优惠退款') THEN '退款' + END AS status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no; + +----------------------------------- +-- 1 插入国内数据 +-- 1.7 插入男生女生换货数据 +----------------------------------- +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2022-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code = 'NCL' + AND receipt_no NOT IN ('99N1LQ2305060003','99N0YU2304070005','99N1LQ2305100004','99N0YU2304100002') + OR (receipt_no IN('99N1LQ2305060003','99N0YU2304070005') AND goods_amt >0 AND qty>0) + OR (receipt_no IN('99N1LQ2305100004','99N0YU2304100002') AND goods_amt <0 AND qty<0) +GROUP BY store_code,receipt_no +HAVING status IN('换货销售','换货')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN (a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0)) AND a.source_bill_no <> '' THEN a.source_bill_no + WHEN ((a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 and a.goods_amt > 0)) AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + CASE + WHEN a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0) THEN '销售' + WHEN (a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 AND a.goods_amt > 0) THEN '退款' + END AS status +FROM( + SELECT + *, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + dwd_trade_hkaudit_shop_receipt_mt dthsrm + WHERE CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) +) a +LEFT JOIN( + SELECT + store_code, + status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no; + +----------------------------------- +-- 1 插入国内数据 +-- 1.8 替换SBZ老系统店铺数据为新系统店铺数据 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_sbz_old_system; +INSERT INTO audit_bi_pro.custom_offline_sbz_old_system +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.sale_time, + CASE + WHEN b.store_code <> '' THEN b.store_code + WHEN b.store_code = '' THEN a.store_code + END AS store_code, + CASE + WHEN b.store_name <> '' THEN b.store_name + WHEN b.store_name = '' THEN a.store_name + END AS store_name, + a.receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no +FROM ( + SELECT * FROM dwd_trade_hkaudit_shop_receipt_other_mt WHERE brand_code = 'SBZ' +)a +LEFT JOIN( + SELECT * FROM custom_offline_sbz_store_old_new +)b +ON a.store_code = b.old_store_code + +----------------------------------- +-- 1 插入国内数据 +-- 1.9 插入SBZ老系统数据 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_sale_return_local; +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + CASE + WHEN receipt_no LIKE '%-%-%' AND LENGTH(receipt_no) = 25 THEN SUBSTR(receipt_no,1,23) + WHEN receipt_no LIKE '%-%-%' AND LENGTH(receipt_no) = 26 THEN SUBSTR(receipt_no,1,24) + WHEN receipt_no NOT LIKE '%-%-%' AND LENGTH(receipt_no) = 11 THEN SUBSTR(receipt_no,1,9) + WHEN receipt_no NOT LIKE '%-%-%' AND LENGTH(receipt_no) IN (23,24,25) THEN receipt_no + END AS order_id, + CASE + -- RC单算销售 + WHEN order_id LIKE 'RC%' THEN '销售' + -- 金额大于0 + WHEN sum(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN sum(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN sum(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN sum(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0s + WHEN sum(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN sum(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN sum(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN sum(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN sum(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + custom_offline_sbz_old_system dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2024-05-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code = 'SBZ' +GROUP BY store_code,order_id +HAVING status IN('销售','单赠品销售','优惠销售','退款','单赠品退款','优惠退款')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN b.status = '销售' THEN a.a_receipt_no + WHEN b.status = '退款' AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.a_receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + b.status +FROM( + SELECT + *, + CASE + WHEN receipt_no LIKE '%-%-%' AND LENGTH(receipt_no) = 25 THEN SUBSTR(receipt_no,1,23) + WHEN receipt_no LIKE '%-%-%' AND LENGTH(receipt_no) = 26 THEN SUBSTR(receipt_no,1,24) + WHEN receipt_no NOT LIKE '%-%-%' AND LENGTH(receipt_no) = 11 THEN SUBSTR(receipt_no,1,9) + WHEN receipt_no NOT LIKE '%-%-%' AND LENGTH(receipt_no) IN (23,24,25) THEN receipt_no + END AS a_receipt_no, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + custom_offline_sbz_old_system dthsrm + WHERE CONCAT(store_code,a_receipt_no) IN (SELECT CONCAT(store_code,order_id) FROM sale_status) + AND toDateTime(sale_time,'Asia/Shanghai') >= '2024-05-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' +) a +LEFT JOIN( + SELECT + store_code, + CASE + WHEN status IN('销售','单赠品销售','优惠销售') THEN '销售' + WHEN status IN('退款','单赠品退款','优惠退款') THEN '退款' + END AS status, + order_id + FROM sale_status +) b +ON a.store_code = b.store_code AND a.a_receipt_no = b.order_id; +----------------------------------- +-- 1 插入国内数据 +-- 1.10 插入SBZ老系统换货数据 +----------------------------------- +INSERT INTO audit_bi_pro.custom_offline_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + CASE + WHEN receipt_no LIKE '%-%-%' AND LENGTH(receipt_no) = 25 THEN SUBSTR(receipt_no,1,23) + WHEN receipt_no LIKE '%-%-%' AND LENGTH(receipt_no) = 26 THEN SUBSTR(receipt_no,1,24) + WHEN receipt_no NOT LIKE '%-%-%' AND LENGTH(receipt_no) = 11 THEN SUBSTR(receipt_no,1,9) + WHEN receipt_no NOT LIKE '%-%-%' AND LENGTH(receipt_no) IN (23,24,25) THEN receipt_no + END AS order_id, + CASE + -- 金额大于0 + WHEN sum(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN sum(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN sum(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN sum(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN sum(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN sum(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN sum(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN sum(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN sum(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + custom_offline_sbz_old_system dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2024-05-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code = 'SBZ' +GROUP BY store_code,order_id +HAVING status IN('换货销售','换货')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.store_name, + CASE + WHEN (a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0)) AND a.source_bill_no <> '' THEN a.source_bill_no + WHEN ((a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 and a.goods_amt > 0)) AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.a_receipt_no + END AS receipt_no, + a.goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + CASE + WHEN a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0) THEN '销售' + WHEN (a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 AND a.goods_amt > 0) THEN '退款' + END AS status +FROM( + SELECT + *, + CASE + WHEN receipt_no LIKE '%-%-%' AND LENGTH(receipt_no) = 25 THEN SUBSTR(receipt_no,1,23) + WHEN receipt_no LIKE '%-%-%' AND LENGTH(receipt_no) = 26 THEN SUBSTR(receipt_no,1,24) + WHEN receipt_no NOT LIKE '%-%-%' AND LENGTH(receipt_no) = 11 THEN SUBSTR(receipt_no,1,9) + WHEN receipt_no NOT LIKE '%-%-%' AND LENGTH(receipt_no) IN (23,24,25) THEN receipt_no + END AS a_receipt_no, + toDateTime(sale_time,'Asia/Shanghai') AS saletime + FROM + custom_offline_sbz_old_system dthsrm + WHERE CONCAT(store_code,a_receipt_no) IN (SELECT CONCAT(store_code,order_id) FROM sale_status) + AND toDateTime(sale_time,'Asia/Shanghai') >= '2024-05-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' +) a +LEFT JOIN( + SELECT + store_code, + status, + order_id + FROM sale_status +) b +ON a.store_code = b.store_code AND a.a_receipt_no = b.order_id; +----------------------------------- +-- 2 插入海外数据 +-- 2.1导入海外销售、退款 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_abroad_sale_return_local; +INSERT INTO audit_bi_pro.custom_offline_abroad_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_other_mt +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2022-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code <> 'SBZ' + AND receipt_no NOT IN ('01L082301170039009','01L082301170039012','01L082301160039013', + '01L082301160039015','02L352501190006299','01L082301160039008','01L082301170039011', + '01L082301170039016','02L082301160038947','01L352502040009339', + '02E022207240007125','02E042205220008537','04L522409150063759','02E022505010028060') +GROUP BY store_code,receipt_no +HAVING status IN('销售','单赠品销售','优惠销售','退款','单赠品退款','优惠退款')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.n_store_name, + CASE + WHEN b.status = '销售' THEN a.receipt_no + WHEN b.status = '退款' AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + ROUND(a.goods_amt * rate.exchange_rate,2) AS goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + b.status +FROM( + SELECT + m.*, + CASE + WHEN n.store_name <> '' THEN n.store_name + WHEN n.store_name = '' THEN m.store_name + END AS n_store_name, + toDateTime(m.sale_time,'Asia/Shanghai') AS saletime, + CASE + WHEN SUBSTR(n_store_name,1,6) = '泰国' THEN 'THB' + WHEN SUBSTR(n_store_name,1,6) = '马来' THEN 'MYR' + WHEN SUBSTR(n_store_name,1,6) = '越南' THEN 'VND' + WHEN SUBSTR(n_store_name,1,6) = '菲律' THEN 'PHP' + WHEN SUBSTR(n_store_name,1,6) = '新加' THEN 'SGD' + WHEN SUBSTR(n_store_name,1,6) = '印尼' THEN 'IDR' + WHEN SUBSTR(n_store_name,1,6) = '肯尼' THEN 'KES' + END AS currency + FROM( + SELECT + * + FROM + dwd_trade_hkaudit_shop_receipt_other_mt + WHERE + CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) + AND brand_code <>'SBZ' + AND receipt_no NOT IN ('01L082301170039009','01L082301170039012','01L082301160039013', + '01L082301160039015','02L352501190006299','01L082301160039008','01L082301170039011', + '01L082301170039016','02L082301160038947','01L352502040009339', + '02E022207240007125','02E042205220008537','04L522409150063759','02E022505010028060') + ) m + LEFT JOIN ( + SELECT + store_code, + store_name + FROM + dim_hkaudit_store_other_mt + ) n + ON m.store_code = n.store_code +) a +LEFT JOIN( + SELECT + store_code, + CASE + WHEN status IN('销售','单赠品销售','优惠销售') THEN '销售' + WHEN status IN('退款','单赠品退款','优惠退款') THEN '退款' + END AS status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no +LEFT JOIN ( + SELECT + rate_date, + currency, + exchange_rate + FROM + custom_exchange_rate_local +) rate ON rate.currency = a.currency AND toYear(rate.rate_date) = toYear(a.saletime) AND toMonth(rate.rate_date) = toMonth(a.saletime); + +----------------------------------- +-- 2 插入海外数据 +-- 2.2 插入海外换货数据 +----------------------------------- +INSERT INTO audit_bi_pro.custom_offline_abroad_sale_return_local +WITH sale_status AS ( +SELECT + store_code, + receipt_no, + CASE + -- 金额大于0 + WHEN SUM(goods_amt) > 0 AND MIN(qty) >= 0 THEN '销售' + WHEN SUM(goods_amt) > 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货销售' + -- 金额小于0 + WHEN SUM(goods_amt) < 0 AND MAX(qty) <= 0 THEN '退款' + WHEN SUM(goods_amt) < 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货' + -- 金额等于0 + WHEN SUM(goods_amt) = 0 AND MAX(qty) > 0 AND MIN(qty)<0 THEN '换货或门店调整' + WHEN SUM(goods_amt) = 0 AND MIN(qty) > 0 THEN '单赠品销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) < 0 THEN '单赠品退款' + WHEN SUM(goods_amt) = 0 AND MIN(qty) >= 0 THEN '优惠销售' + WHEN SUM(goods_amt) = 0 AND MAX(qty) <= 0 THEN '优惠退款' + ELSE '其他' + END AS status +FROM + dwd_trade_hkaudit_shop_receipt_other_mt dthsrm +WHERE + toDateTime(sale_time,'Asia/Shanghai') >= '2022-01-01 00:00:00' + AND toDateTime(sale_time,'Asia/Shanghai') < '2025-07-01 00:00:00' + AND brand_code <> 'SBZ' + AND receipt_no NOT IN ('01L082301170039009','01L082301170039012','01L082301160039013', + '01L082301160039015','02L352501190006299','01L082301160039008','01L082301170039011', + '01L082301170039016','02L082301160038947','01L352502040009339', + '02E022207240007125','02E042205220008537','04L522409150063759','02E022505010028060') +GROUP BY store_code,receipt_no +HAVING status IN ('换货销售','换货')) +SELECT + a.source_system, + a.sale_date, + a.brand_code, + a.saletime, + a.store_code, + a.n_store_name, + CASE + WHEN (a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0)) AND a.source_bill_no <> '' THEN a.source_bill_no + WHEN ((a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 and a.goods_amt > 0)) AND a.source_bill_no <> '' THEN a.source_bill_no + ELSE a.receipt_no + END AS receipt_no, + ROUND(a.goods_amt * rate.exchange_rate,2) AS goods_amt, + a.barcode, + a.goods_name, + a.qty, + a.price, + a.pay_type, + a.source_bill_no, + CASE + WHEN a.qty > 0 OR (a.qty = 0 AND a.goods_amt <=0) THEN '销售' + WHEN (a.qty < 0 AND a.goods_amt <=0) OR (a.qty = 0 AND a.goods_amt > 0) THEN '退款' + END AS status +FROM( + SELECT + m.*, + CASE + WHEN n.store_name <> '' THEN n.store_name + WHEN n.store_name = '' THEN m.store_name + END AS n_store_name, + toDateTime(m.sale_time,'Asia/Shanghai') AS saletime, + CASE + WHEN SUBSTR(n_store_name,1,6) = '泰国' THEN 'THB' + WHEN SUBSTR(n_store_name,1,6) = '马来' THEN 'MYR' + WHEN SUBSTR(n_store_name,1,6) = '越南' THEN 'VND' + WHEN SUBSTR(n_store_name,1,6) = '菲律' THEN 'PHP' + WHEN SUBSTR(n_store_name,1,6) = '新加' THEN 'SGD' + WHEN SUBSTR(n_store_name,1,6) = '印尼' THEN 'IDR' + WHEN SUBSTR(n_store_name,1,6) = '肯尼' THEN 'KES' + END AS currency + FROM( + SELECT + * + FROM + dwd_trade_hkaudit_shop_receipt_other_mt + WHERE + CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM sale_status) + AND brand_code <>'SBZ' + AND receipt_no NOT IN ('01L082301170039009','01L082301170039012','01L082301160039013', + '01L082301160039015','02L352501190006299','01L082301160039008','01L082301170039011', + '01L082301170039016','02L082301160038947','01L352502040009339', + '02E022207240007125','02E042205220008537','04L522409150063759','02E022505010028060') + ) m + LEFT JOIN ( + SELECT + store_code, + store_name + FROM + dim_hkaudit_store_other_mt + ) n + ON m.store_code = n.store_code +) a +LEFT JOIN( + SELECT + store_code, + status, + receipt_no + FROM sale_status +) b +ON a.store_code = b.store_code AND a.receipt_no = b.receipt_no +LEFT JOIN ( + SELECT + rate_date, + currency, + exchange_rate + FROM + custom_exchange_rate_local +) rate ON rate.currency = a.currency AND toYear(rate.rate_date) = toYear(a.saletime) AND toMonth(rate.rate_date) = toMonth(a.saletime); + + +----------------------------------- +-- 3 插入店铺数据 +-- 3.1 插入店铺主数据表 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_store_info_all_local; +INSERT INTO audit_bi_pro.custom_store_info_all_local +SELECT + MIN(brand_code) AS brand_code, + store_code, + MIN(store_name) AS store_name, + '' AS store_nature, + MIN(open_date) AS open_date, + MIN(close_date) AS close_date, + MIN(country) AS country, + MIN(province) AS province, + MIN(city) AS city, + '' AS store_status, + '' AS period, + 'store' AS source_table +FROM dim_hkaudit_store_mt +GROUP BY store_code +UNION ALL +SELECT + brand_code, + store_code, + store_name, + '' AS store_nature, + open_date, + close_date, + country, + province, + city, + '' AS store_status, + '' AS period, + 'store_other' AS source_table +FROM dim_hkaudit_store_other_mt +WHERE store_code <>'B01R' +UNION ALL +SELECT + MIN(brand_code) AS min_brand_code, + store_code, + MIN(store_name) AS store_name, + '' AS store_nature, + MIN(open_date) AS open_date, + MIN(close_date) AS close_date, + MIN(country) AS country, + MIN(CASE + WHEN province = '天津' THEN '天津市' + WHEN province = '上海' THEN '上海市' + ELSE province + END) AS province, + MIN(CASE WHEN city = ' 西安市' THEN '西安市'ELSE city END) AS city, + '' AS store_status, + '' AS period, + 'jh_sbz' AS source_table +FROM dim_hkaudit_jh_sbz_store_mt +WHERE + CONCAT(brand_code,store_code) NOT IN ('jxhSW00150','sbzS100001') + AND store_code NOT IN ( + SELECT + store_code + FROM ( + SELECT store_code,MIN(store_name) as name from dim_hkaudit_store_mt dhsm group by store_code + UNION ALL + SELECT store_code,MIN(store_name) as name from dim_hkaudit_jh_sbz_store_mt dhjssm group by store_code + ) + GROUP BY store_code + HAVING COUNT(DISTINCT name) > 1 + ) +GROUP BY store_code; + +-- 3.2 插入缺少店铺数据 +INSERT INTO audit_bi_pro.custom_store_info_all_local(store_code,store_name,country,province,city,source_table,brand_code) VALUES +('S454','分销【唯品代销】的店铺','CN','北京市','北京市','store_other','SBZ'), +('S1538','分销【荟品仓】的店铺','CN','上海市','上海','store_other','SBZ'), +('S2440','濮阳盛友体育','CN','河南省','濮阳','store_other','SBZ'), +('S2368','NEO河北邯郸邯山陵西南大街5号阳光世贸广场店','CN','河北省','邯郸','store_other','SBZ'), +('S1072','上海虹口吉买盛店','CN','上海市','上海','store_other','SBZ'), +('S2427','常州京榜折扣店','CN','江苏省','常州','store_other','SBZ'), +('S3094','贵州浅若衣坊','CN','贵州省','贵阳','store_other','SBZ'); + +----------------------------------- +-- 3.3 插入门店性质表 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_store_nature_all_local; +INSERT INTO audit_bi_pro.custom_store_nature_all_local +SELECT + a.brand_code, + a.store_code, + a.store_name, + b.store_nature, + a.open_date, + a.close_date, + a.country, + a.province, + a.city, + a.store_status, + b.period, + a.source_table +FROM( + SELECT + * + FROM + custom_store_info_all_local + WHERE + source_table = 'store' +) a +LEFT JOIN( + SELECT + store_code, + CASE + WHEN store_code ='K020' THEN '联营店' + ELSE store_nature + END AS store_nature, + SUBSTR(period,1,4) AS period + FROM + dim_hkaudit_store_mt dhsm +) b +ON a.store_code = b.store_code +UNION ALL +SELECT + a.brand_code, + a.store_code, + a.store_name, + CASE + WHEN a.store_code ='S454' THEN '联营店' + WHEN a.store_code ='S1538' THEN '联营店' + WHEN a.store_code ='S2440' THEN '联营店' + WHEN a.store_code ='S2368' THEN '联营店' + WHEN a.store_code ='S1072' THEN '联营店' + WHEN a.store_code ='S2427' THEN '联营店' + WHEN a.store_code ='S3094' THEN '联营店' + ELSE b.store_nature + END AS store_nature, + a.open_date, + a.close_date, + a.country, + a.province, + a.city, + a.store_status, + '' AS `year`, + a.source_table +FROM( + SELECT + * + FROM + custom_store_info_all_local + WHERE + source_table = 'store_other' +) a +LEFT JOIN( + SELECT + store_code, + MIN(store_nature) AS store_nature + FROM + dim_hkaudit_store_other_mt dhsom + GROUP BY + store_code +) b +ON a.store_code = b.store_code +UNION ALL +SELECT + a.brand_code, + a.store_code, + a.store_name, + b.store_nature, + a.open_date, + a.close_date, + a.country, + a.province, + a.city, + a.store_status, + '' AS `year`, + a.source_table +FROM( + SELECT + * + FROM + custom_store_info_all_local + WHERE + source_table = 'jh_sbz' +) a +LEFT JOIN( + SELECT + store_code, + MIN(store_nature) AS store_nature + FROM + dim_hkaudit_jh_sbz_store_mt dhjssm + GROUP BY + store_code +) b +ON a.store_code = b.store_code + +-- 3.4 补充剩余年份及性质到店铺性质表 +见导入截图 + + +--------------------------- +-- 4汇总数据至结算表 +-- 4.1 导入数据到结算比例表 +--------------------------- +见导入截图 + +----------------------------------- +-- 4.2 插入国内数据 +----------------------------------- +-- 2022-2023 +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_sale_return_settle_local; + +INSERT INTO audit_bi_pro.custom_offline_sale_return_settle_local +SELECT + a.*, + CASE + WHEN b.store_nature <> '' THEN b.store_nature + WHEN b.store_nature = '' THEN c.store_nature + END AS store_nature, + CASE + WHEN a.brand_code IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2022 AND store_nature = '直营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2022 AND store_nature = '联营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.8256 + WHEN toYear(a.sale_time)= 2022 AND store_nature = '加盟店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5494 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '直营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '联营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.7893 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '加盟店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5621 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '直营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '联营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.8041 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '加盟店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5684 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '代理店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.6485 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '直营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '联营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.7925 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '加盟店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5579 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '代理店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5895 + END AS settle_ratio +FROM custom_offline_sale_return_local a +LEFT JOIN( + SELECT + store_code, + store_nature, + `year` AS period + FROM + custom_store_nature_all_local csnal + WHERE + source_table = 'store' +)b +ON a.store_code = b.store_code AND toString(toYear(a.sale_time)) = b.period +LEFT JOIN( + SELECT + store_code, + store_nature AS store_nature + FROM + custom_store_nature_all_local csnal + WHERE source_table <> 'store' +)c +ON a.store_code = c.store_code +WHERE a.sale_time >='2022-01-01 00:00:00' +AND a.sale_time <'2024-01-01 00:00:00'; + + + +-- 2024-2025 +INSERT INTO audit_bi_pro.custom_offline_sale_return_settle_local +SELECT + a.*, + CASE + WHEN b.store_nature <> '' THEN b.store_nature + WHEN b.store_nature = '' THEN c.store_nature + END AS store_nature, + CASE + WHEN a.brand_code IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2022 AND store_nature = '直营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2022 AND store_nature = '联营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.8256 + WHEN toYear(a.sale_time)= 2022 AND store_nature = '加盟店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5494 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '直营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '联营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.7893 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '加盟店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5621 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '直营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '联营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.8041 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '加盟店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5684 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '代理店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.6485 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '直营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 1 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '联营店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.7925 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '加盟店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5579 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '代理店' AND a.brand_code NOT IN ('SBZ','JXH') THEN 0.5895 + END AS settle_ratio +FROM custom_offline_sale_return_local a +LEFT JOIN( + SELECT + store_code, + store_nature, + `year` AS period + FROM + custom_store_nature_all_local csnal + WHERE + source_table = 'store' +)b +ON a.store_code = b.store_code AND toString(toYear(a.sale_time)) = b.period +LEFT JOIN( + SELECT + store_code, + store_nature AS store_nature + FROM + custom_store_nature_all_local csnal + WHERE source_table <> 'store' +)c +ON a.store_code = c.store_code +WHERE a.sale_time >='2024-01-01 00:00:00' +AND a.sale_time <'2025-07-01 00:00:00'; + +----------------------------------- +-- 4.3 插入海外数据 +----------------------------------- +TRUNCATE TABLE IF EXISTS audit_bi_pro.custom_offline_abroad_sale_return_settle_local; +INSERT INTO audit_bi_pro.custom_offline_abroad_sale_return_settle_local +SELECT + a.*, + c.store_nature, + CASE + WHEN toYear(a.sale_time)= 2022 AND store_nature = '直营店' THEN 1 + WHEN toYear(a.sale_time)= 2022 AND store_nature = '联营店' THEN 0.8256 + WHEN toYear(a.sale_time)= 2022 AND store_nature = '加盟店' THEN 0.5494 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '直营店' THEN 1 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '联营店' THEN 0.7893 + WHEN toYear(a.sale_time)= 2023 AND store_nature = '加盟店' THEN 0.5621 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '直营店' THEN 1 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '联营店' THEN 0.8041 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '加盟店' THEN 0.5684 + WHEN toYear(a.sale_time)= 2024 AND store_nature = '代理店' THEN 0.6485 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '直营店' THEN 1 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '联营店' THEN 0.7925 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '加盟店' THEN 0.5579 + WHEN toYear(a.sale_time)= 2025 AND store_nature = '代理店' THEN 0.5895 + END AS settle_ratio +FROM custom_offline_abroad_sale_return_local a +LEFT JOIN( + SELECT + store_code, + store_nature AS store_nature + FROM + custom_store_nature_all_local csnal + WHERE source_table <> 'store' +)c +ON a.store_code = c.store_code; + diff --git a/底稿/附件/2 执行SQL/CAATS-01-03 数据质量评估.txt b/底稿/附件/2 执行SQL/CAATS-01-03 数据质量评估.txt index eef1c9c..137b401 100644 --- a/底稿/附件/2 执行SQL/CAATS-01-03 数据质量评估.txt +++ b/底稿/附件/2 执行SQL/CAATS-01-03 数据质量评估.txt @@ -138,4 +138,51 @@ GROUP BY a.perYear, a.brandCode ORDER BY a.perYear; SQL6: SELECT SUBSTR(sale_date, 1, 4),brand_code, SUM(goods_amt) FROM custom_offline_sale_return_local cosrl WHERE SUBSTR(sale_date, 1, 10) >= '2024-05-01' AND SUBSTR(sale_date, 1, 10) <= '2025-06-30' AND brand_code IN ('SBZ', 'JXH') -GROUP BY SUBSTR(sale_date, 1, 4), brand_code; \ No newline at end of file +GROUP BY SUBSTR(sale_date, 1, 4), brand_code; + +SQL7: +SELECT + a."年份", + a."门店性质", + a."净销售金额", + b.settle_year AS "结算年份", + b.store_nature AS "门店性质(海澜提供)", + b.retail_amt AS "零售金额", + b.settle_amt AS "结算金额", + b.retail_amt - a."净销售金额" AS "差异" +FROM +( +SELECT + toYear(a.sale_time) AS "年份", + CASE + WHEN b.store_nature <> '' THEN b.store_nature + WHEN b.store_nature = '' THEN c.store_nature + END AS "门店性质", + SUM(a.goods_amt) AS "净销售金额" +FROM custom_offline_sale_return_local a +LEFT JOIN( + SELECT + store_code, + store_nature, + `year` AS period + FROM + custom_store_nature_all_local csnal + WHERE + source_table = 'store' +)b +ON a.store_code = b.store_code AND toString(toYear(a.sale_time)) = b.period +LEFT JOIN( + SELECT + store_code, + MIN(store_nature) AS store_nature + FROM + custom_store_nature_all_local csnal + GROUP BY store_code +)c +ON a.store_code = c.store_code +WHERE a.brand_code <>'SBZ' +AND a.brand_code <> 'JXH' +GROUP BY "年份","门店性质" +) a +LEFT JOIN dwd_storesettlement_hkaudit_settle_amt_mt b on toString(a."年份")=b.settle_year AND a."门店性质"=b.store_nature +ORDER BY a."年份",a."门店性质" \ No newline at end of file diff --git a/底稿/附件/2 执行SQL/CAATS-01-04 分析指标汇总-线下.txt b/底稿/附件/2 执行SQL/CAATS-01-04 分析指标汇总-线下.txt new file mode 100644 index 0000000..0fc9b24 --- /dev/null +++ b/底稿/附件/2 执行SQL/CAATS-01-04 分析指标汇总-线下.txt @@ -0,0 +1,1758 @@ +-- 三、数据分析 +---------------------------- +-- 分析条件一 +---------------------------- +-- 1.1.1.1 线下各店铺每年度销售金额、订单数量、订单均价 +SELECT + toYear(a.saletime) AS "年份", + a.store_code AS "店铺编码", + b.store_name AS "店铺名称", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.sale_amt + ELSE toDecimal64(toDecimal64(a.sale_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "销售金额(元)", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量", + CASE + WHEN "订单数量" = 0 THEN 0 + ELSE ROUND("销售金额(元)"/"订单数量",2) + END AS "订单均价(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS sale_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM custom_offline_sale_return_settle_local + WHERE sale_status = '销售' + GROUP BY store_code, receipt_no +) a +LEFT JOIN( SELECT store_code, store_name FROM custom_store_info_all_local csial ) b ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY "年份","店铺编码","店铺名称" +ORDER BY toYear(a.saletime) ASC,"销售金额(元)" DESC; + + +-- 1.1.1.2 线下各店铺关联原单每年度净销售 +SELECT + toYear(a.saletime) AS "年份", + a.store_code AS "店铺编码", + b.store_name AS "店铺名称", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.sale_amt + ELSE toDecimal64(toDecimal64(a.sale_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "净销售金额(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS sale_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM custom_offline_sale_return_settle_local + GROUP BY store_code, receipt_no +) a +LEFT JOIN( SELECT store_code,store_name FROM custom_store_info_all_local csial ) b ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY "年份", "店铺编码", "店铺名称" +ORDER BY toYear(a.saletime) ASC, "净销售金额(元)" DESC; + + +-- 1.1.1.2 线下各店铺关联原单24年度净销售 +SELECT + toYear(a.saletime) AS "年份", + a.store_code AS "店铺编码", + b.store_name AS "店铺名称", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.sale_amt + ELSE toDecimal64(toDecimal64(a.sale_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "净销售金额(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS sale_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM custom_offline_sale_return_settle_local + GROUP BY store_code, receipt_no +) a +LEFT JOIN( SELECT store_code,store_name FROM custom_store_info_all_local csial ) b ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +WHERE a.saletime >= '2024-01-01 00:00:00' AND a.saletime <'2024-07-01 00:00:00' +GROUP BY "年份", "店铺编码", "店铺名称" +ORDER BY toYear(a.saletime) ASC, "净销售金额(元)" DESC; + +-- 1.1.1.2 线下各店铺不关联原单每年度净销售金额 +SELECT + a.sale_year AS "年份", + a.store_code AS "店铺编码", + b.store_name AS "店铺名称", + a.settle_amt AS "净销售金额(元)" +FROM( + SELECT + toYear(sale_time) AS sale_year, + store_code, + SUM(toDecimal64(toDecimal64(goods_amt,4)*toDecimal64(settle_ratio,4),2)) AS settle_amt + FROM + custom_offline_sale_return_settle_local cosrl + GROUP BY + sale_year, store_code + ) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +ORDER BY + "年份" ASC, "净销售金额(元)" DESC; + +-- 1.1.1.2 线下各店铺不关联原单24年度净销售金额 +SELECT + a.sale_year AS "年份", + a.store_code AS "店铺编码", + b.store_name AS "店铺名称", + a.settle_amt AS "净销售金额(元)" +FROM( + SELECT + toYear(sale_time) AS sale_year, + store_code, + SUM(toDecimal64(toDecimal64(goods_amt,4)*toDecimal64(settle_ratio,4),2)) AS settle_amt + FROM + custom_offline_sale_return_settle_local + WHERE + sale_time >= '2024-01-01 00:00:00' AND sale_time <'2024-07-01 00:00:00' + GROUP BY + sale_year, store_code + ) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +ORDER BY + "年份" ASC, "净销售金额(元)" DESC; + +-- 1.1.2.1 线下按品牌关联原单按年统计净销售金额 +SELECT + toYear(a.saletime) AS "年份", + a.brand_code AS "品牌编码", + CASE + WHEN brand_code = 'HLA' THEN '海澜之家' + WHEN brand_code = 'YEO' THEN '英氏' + WHEN brand_code = 'NCL' THEN '男生女生' + WHEN brand_code = 'OVV' THEN 'OVV' + WHEN brand_code = 'HLM' THEN '海澜优选' + WHEN brand_code = 'BES' THEN '海一家' + WHEN brand_code = 'HGS' THEN '蓝鲸' + WHEN brand_code = 'HJS' THEN '黑鲸' + WHEN brand_code = 'SBZ' THEN '斯搏兹' + WHEN brand_code = 'JXH' THEN '京新海' + WHEN brand_code = 'HED' THEN 'HEAD' + WHEN brand_code = 'HLX' THEN '海澜之家甄选好鞋' + WHEN brand_code = 'HLP' THEN 'HLA PLUS' + END AS "品牌名称", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.net_sale + ELSE toDecimal64(toDecimal64(a.net_sale,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "净销售金额(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS net_sale, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + GROUP BY + store_code ,receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份","品牌编码","品牌名称" +ORDER BY + toYear(a.saletime) ASC, "净销售金额(元)" DESC; + + +-- 1.1.2.1 按品牌关联原单统计24年上半年净销售金额 +SELECT + toYear(a.saletime) AS "年份", + a.brand_code AS "品牌编码", + CASE + WHEN brand_code = 'HLA' THEN '海澜之家' + WHEN brand_code = 'YEO' THEN '英氏' + WHEN brand_code = 'NCL' THEN '男生女生' + WHEN brand_code = 'OVV' THEN 'OVV' + WHEN brand_code = 'HLM' THEN '海澜优选' + WHEN brand_code = 'BES' THEN '海一家' + WHEN brand_code = 'HGS' THEN '蓝鲸' + WHEN brand_code = 'HJS' THEN '黑鲸' + WHEN brand_code = 'SBZ' THEN '斯搏兹' + WHEN brand_code = 'JXH' THEN '京新海' + WHEN brand_code = 'HED' THEN 'HEAD' + WHEN brand_code = 'HLX' THEN '海澜之家甄选好鞋' + WHEN brand_code = 'HLP' THEN 'HLA PLUS' + END AS "品牌名称", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.net_sale + ELSE toDecimal64(toDecimal64(a.net_sale,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "净销售金额(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS net_sale, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + GROUP BY + store_code ,receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(saletime)) AND r.store_nature = a.store_nature +WHERE a.saletime >= '2024-01-01 00:00:00' AND a.saletime <'2024-07-01 00:00:00' +GROUP BY + "年份","品牌编码","品牌名称" +ORDER BY + toYear(a.saletime) ASC, "净销售金额(元)" DESC; + +-- 1.1.2.1 线下按品牌不关联原单按年统计净销售金额 +SELECT + a.sale_year AS "年份", + a.brand_code AS "品牌编码", + a.brand_name AS "品牌名称", + a.amt AS "净销售金额(元)" +FROM( + SELECT + toYear(sale_time) AS sale_year, + brand_code, + CASE + WHEN brand_code = 'HLA' THEN '海澜之家' + WHEN brand_code = 'YEO' THEN '英氏' + WHEN brand_code = 'NCL' THEN '男生女生' + WHEN brand_code = 'OVV' THEN 'OVV' + WHEN brand_code = 'HLM' THEN '海澜优选' + WHEN brand_code = 'BES' THEN '海一家' + WHEN brand_code = 'HGS' THEN '蓝鲸' + WHEN brand_code = 'HJS' THEN '黑鲸' + WHEN brand_code = 'SBZ' THEN '斯搏兹' + WHEN brand_code = 'JXH' THEN '京新海' + WHEN brand_code = 'HED' THEN 'HEAD' + WHEN brand_code = 'HLX' THEN '海澜之家甄选好鞋' + WHEN brand_code = 'HLP' THEN 'HLA PLUS' + END AS brand_name, + SUM(toDecimal64(toDecimal64(goods_amt,4)*toDecimal64(settle_ratio,4),2)) AS amt + FROM + custom_offline_sale_return_settle_local cosrl + GROUP BY + sale_year, brand_code,brand_name + ) a +ORDER BY + a.sale_year ASC, "净销售金额(元)" DESC; + + + +-- 1.1.2.1 线下按品牌不关联原单统计24年净销售金额 +SELECT + a.sale_year AS "年份", + a.brand_code AS "品牌编码", + a.brand_name AS "品牌名称", + a.amt AS "净销售金额(元)" +FROM( + SELECT + toYear(sale_time) AS sale_year, + brand_code, + CASE + WHEN brand_code = 'HLA' THEN '海澜之家' + WHEN brand_code = 'YEO' THEN '英氏' + WHEN brand_code = 'NCL' THEN '男生女生' + WHEN brand_code = 'OVV' THEN 'OVV' + WHEN brand_code = 'HLM' THEN '海澜优选' + WHEN brand_code = 'BES' THEN '海一家' + WHEN brand_code = 'HGS' THEN '蓝鲸' + WHEN brand_code = 'HJS' THEN '黑鲸' + WHEN brand_code = 'SBZ' THEN '斯搏兹' + WHEN brand_code = 'JXH' THEN '京新海' + WHEN brand_code = 'HED' THEN 'HEAD' + WHEN brand_code = 'HLX' THEN '海澜之家甄选好鞋' + WHEN brand_code = 'HLP' THEN 'HLA PLUS' + END AS brand_name, + SUM(toDecimal64(toDecimal64(goods_amt,4)*toDecimal64(settle_ratio,4),2)) AS amt + FROM + custom_offline_sale_return_settle_local cosrl + WHERE + sale_time >= '2024-01-01 00:00:00' AND sale_time < '2024-07-01 00:00:00' + GROUP BY + sale_year, brand_code,brand_name + ) a +ORDER BY + a.sale_year ASC, "净销售金额(元)" DESC; + + +-- 1.1.2.2 线下海外品牌关联原单年度净销售 +SELECT + toYear(a.saletime) AS "年份", + CASE + WHEN a.brand_code = '' THEN d.brand_code + WHEN a.brand_code <>'' THEN a.brand_code + END AS "品牌编码", + CASE + WHEN "品牌编码" = 'HLA' THEN '海澜之家' + WHEN "品牌编码" = 'YEO' THEN '英氏' + WHEN "品牌编码" = 'NCL' THEN '男生女生' + WHEN "品牌编码" = 'OVV' THEN 'OVV' + WHEN "品牌编码" = 'HLM' THEN '海澜优选' + WHEN "品牌编码" = 'BES' THEN '海一家' + WHEN "品牌编码" = 'HGS' THEN '蓝鲸' + WHEN "品牌编码" = 'HJS' THEN '黑鲸' + WHEN "品牌编码" = 'SBZ' THEN '斯搏兹' + WHEN "品牌编码" = 'JXH' THEN '京新海' + WHEN "品牌编码" = 'HED' THEN 'HEAD' + WHEN "品牌编码" = 'HLX' THEN '海澜之家甄选好鞋' + WHEN "品牌编码" = 'HLP' THEN 'HLA PLUS' + WHEN "品牌编码" = 'EHT' THEN '爱居兔' + WHEN "品牌编码" = 'STA' THEN '思加图' + ELSE "品牌编码" + END AS "品牌名称", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.net_sale + ELSE toDecimal64(toDecimal64(a.net_sale,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "净销售金额(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS net_sale, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_abroad_sale_return_settle_local + GROUP BY + store_code ,receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(saletime)) AND r.store_nature = a.store_nature +LEFT JOIN( + SELECT + store_code, + MIN(brand_code) AS brand_code + FROM + dim_hkaudit_store_other_mt + GROUP BY store_code +)d +ON a.store_code = d.store_code +GROUP BY + "年份","品牌编码","品牌名称" +ORDER BY + toYear(a.saletime) ASC, "净销售金额(元)" DESC; + +-- 1.1.2.2 线下海外品牌不关联原单年度净销售 +SELECT + a.sale_year AS "年份", + a.brand_code AS "品牌编码", + a.brand_name AS "品牌名称", + a.amt AS "净销售金额(元)" +FROM( + SELECT + toYear(sale_time) AS sale_year, + CASE + WHEN brand_code = '' THEN d.brand_code + WHEN brand_code <>'' THEN brand_code + END AS brand_code, + CASE + WHEN brand_code = 'HLA' THEN '海澜之家' + WHEN brand_code = 'YEO' THEN '英氏' + WHEN brand_code = 'NCL' THEN '男生女生' + WHEN brand_code = 'OVV' THEN 'OVV' + WHEN brand_code = 'HLM' THEN '海澜优选' + WHEN brand_code = 'BES' THEN '海一家' + WHEN brand_code = 'HGS' THEN '蓝鲸' + WHEN brand_code = 'HJS' THEN '黑鲸' + WHEN brand_code = 'SBZ' THEN '斯搏兹' + WHEN brand_code = 'JXH' THEN '京新海' + WHEN brand_code = 'HED' THEN 'HEAD' + WHEN brand_code = 'HLX' THEN '海澜之家甄选好鞋' + WHEN brand_code = 'HLP' THEN 'HLA PLUS' + WHEN brand_code = 'EHT' THEN '爱居兔' + WHEN brand_code = 'STA' THEN '思加图' + ELSE brand_code + END AS brand_name, + SUM(toDecimal64(toDecimal64(goods_amt,4)*toDecimal64(settle_ratio,4),2)) AS amt + FROM + custom_offline_abroad_sale_return_settle_local c + LEFT JOIN( + SELECT + store_code, + MIN(brand_code) AS brand_code + FROM + dim_hkaudit_store_other_mt + GROUP BY store_code + )d + ON c.store_code = d.store_code + GROUP BY + sale_year, brand_code, brand_name + ) a +ORDER BY + a.sale_year ASC, "净销售金额(元)" DESC; + + + +-- 1.1.3.1 线下按照门店性质关联原单统计销售金额、订单数量、订单均价 +SELECT + toYear(a.saletime) AS "年份", + a.store_nature AS "门店性质", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.sale_amt + ELSE toDecimal64(toDecimal64(a.sale_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "销售金额(元)", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量", + CASE + WHEN "订单数量" = 0 THEN 0 + ELSE ROUND(SUM(a.sale_amt)/"订单数量",2) + END AS "订单均价(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS sale_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM custom_offline_sale_return_settle_local + WHERE sale_status = '销售' +GROUP BY store_code, receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份","门店性质" +ORDER BY + toYear(a.saletime) ASC,"销售金额(元)" DESC; + + + + +-- 1.1.3.1 线下按照门店性质关联原单统计24年销售金额、订单数量、订单均价 +SELECT + toYear(a.saletime) AS "年份", + a.store_nature AS "门店性质", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.sale_amt + ELSE toDecimal64(toDecimal64(a.sale_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "销售金额(元)", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量", + CASE + WHEN "订单数量" = 0 THEN 0 + ELSE ROUND(SUM(a.sale_amt)/"订单数量",2) + END AS "订单均价(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS sale_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM custom_offline_sale_return_settle_local + WHERE sale_status = '销售' +GROUP BY store_code, receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(saletime)) AND r.store_nature = a.store_nature +WHERE a.saletime >='2024-01-01 00:00:00' AND a.saletime <'2024-07-01 00:00:00' +GROUP BY + "年份","门店性质" +ORDER BY + toYear(a.saletime) ASC,"销售金额(元)" DESC; + + + + + +-- 1.1.3.2 线下按门店性质关联原单统计净销售金额 +SELECT + toYear(a.saletime) AS "年份", + a.store_nature AS "门店性质", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.sale_amt + ELSE toDecimal64(toDecimal64(a.sale_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "净销售金额(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS sale_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM custom_offline_sale_return_settle_local +GROUP BY store_code, receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份","门店性质" +ORDER BY + toYear(a.saletime) ASC,"净销售金额(元)" DESC; + + + +-- 1.1.3.2 线下按门店性质关联原单统计24年净销售金额 +SELECT + toYear(a.saletime) AS "年份", + a.store_nature AS "门店性质", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.sale_amt + ELSE toDecimal64(toDecimal64(a.sale_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "净销售金额(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS sale_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM custom_offline_sale_return_settle_local +GROUP BY store_code, receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(saletime)) AND r.store_nature = a.store_nature +WHERE a.saletime >='2024-01-01 00:00:00' AND a.saletime <'2024-07-01 00:00:00' +GROUP BY + "年份","门店性质" +ORDER BY + toYear(a.saletime) ASC,"净销售金额(元)" DESC; + + + + +-- 1.1.3.3 线下按门店性质不关联原单统计净销售金额 +SELECT + toYear(a.sale_time) AS "年份", + a.store_nature AS "门店性质", + SUM(toDecimal64(toDecimal64(goods_amt,4)*toDecimal64(settle_ratio,4),2)) AS "净销售金额" +FROM custom_offline_sale_return_settle_local a +GROUP BY "年份","门店性质" +ORDER BY "年份","门店性质"; + + + +-- 1.1.3.3 线下按门店性质不关联原单统计24年净销售 +SELECT + toYear(a.sale_time) AS "年份", + a.store_nature AS "门店性质", + SUM(toDecimal64(toDecimal64(goods_amt,4)*toDecimal64(settle_ratio,4),2)) AS "净销售金额" +FROM custom_offline_sale_return_settle_local a +WHERE a.sale_time >= '2024-01-01 00:00:00' AND a.sale_time <'2024-07-01 00:00:00' +GROUP BY "年份","门店性质" +ORDER BY "年份","门店性质"; + + + +-- 1.1.4 线下店铺月度销售金额 +SELECT + a.sale_year AS "年份", + a.sale_month AS "月份", + a.store_code AS "店铺编码", + b.store_name AS "店铺名称", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.sale_amt + ELSE toDecimal64(toDecimal64(a.sale_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "销售金额(元)" +FROM( + SELECT + store_code, + MIN(toYear(sale_time)) AS sale_year, + MIN(toMonth(sale_time)) AS sale_month, + receipt_no, + SUM(goods_amt) AS sale_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE sale_status = '销售' + GROUP BY + store_code,receipt_no + ) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(sale_year) AND r.store_nature = a.store_nature +GROUP BY + a.sale_year,a.sale_month,a.store_code,b.store_name +ORDER BY + a.store_code ASC, a.sale_year ASC,a.sale_month ASC; + +-- 1.1.5 线下每年前五店铺单笔订单金额分布 +SELECT +    toYear(a.saletime)  AS "年份", +    a.store_code AS "店铺编码", +    b.store_name AS "店铺名称", +    CASE +        WHEN amt <200 THEN '<200' +        WHEN amt >=200 AND amt <500 THEN '200-500' +        WHEN amt >=500 AND amt <1000 THEN '500-1000' +        WHEN amt >=1000 AND amt <2500 THEN '1000-2500' +        WHEN amt >=2500 AND amt <5000 THEN '2500-5000' +        WHEN amt >=5000  THEN '≥5000' +    END AS "单笔订单销售金额(元)", +    SUM(CASE +            WHEN a.brand_code IN ('JXH','SBZ') THEN a.order_amt +            ELSE toDecimal64(toDecimal64(a.order_amt,4)*toDecimal64(r.settle_ratio,4),2) +        END AS amt) AS "销售金额(元)" +FROM( +    SELECT +        store_code, +        receipt_no, +        MIN(sale_time) AS saletime, +        SUM(goods_amt) AS order_amt, +        MIN(brand_code) AS brand_code, +        argMin(store_nature,sale_time) AS store_nature +    FROM +        custom_offline_sale_return_settle_local +    WHERE +        sale_status = '销售' +        AND store_code IN ('H056','B106','H2XF','F003','H05X','H66J','H53Z','S1538','B34W','S100001','S100006','S100011') +    GROUP BY store_code, receipt_no +    ) a +lEFT JOIN( +    SELECT +        store_code, +        store_name +    FROM +        custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY +    "年份","店铺编码", "店铺名称","单笔订单销售金额(元)" +ORDER BY +    "年份","店铺编码", +    CASE +        WHEN "单笔订单销售金额(元)"='<200' THEN 1 +        WHEN "单笔订单销售金额(元)"='200-500'THEN 2 +        WHEN "单笔订单销售金额(元)"='500-1000' THEN 3 +        WHEN "单笔订单销售金额(元)"='1000-2500' THEN 4 +        WHEN "单笔订单销售金额(元)"='2500-5000' THEN 5 +        WHEN "单笔订单销售金额(元)"='≥5000' THEN 6 +    END ASC; + + +-- 1.2.1 线下每年各产品数量、产品销售金额 +SELECT + a.sale_year AS "年份", + a.barcode AS "商品编码", + b.goods_desc AS "商品名称", + SUM(a.qty) AS "产品数量", + SUM(a.settle_amt) AS "销售金额(元)" +FROM( + SELECT + toYear(sale_time) AS sale_year, + barcode, + toDecimal64(toDecimal64(goods_amt,4)*toDecimal64(settle_ratio,4),2) AS settle_amt, + sale_status, + qty + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '销售' +) a +LEFT JOIN( + SELECT barcode, MAX(goods_desc) AS goods_desc + FROM (SELECT barcode, goods_desc FROM dim_hkaudit_goods_mt WHERE country = 'CN' + UNION ALL + SELECT barcode, goods_desc FROM dim_hkaudit_goods_other_mt + ) GROUP BY barcode +) b +ON a.barcode = b.barcode +GROUP BY + a.sale_year,a.barcode,b.goods_desc +ORDER BY + "销售金额(元)" DESC +LIMIT 1000; + +-- 2.1.1 线下每年各店铺所在省份销售金额、订单数量及占比 +SELECT + toYear(a.min_sale_time) AS "年份", + b.province AS "省份", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.goods_amt + ELSE toDecimal64(toDecimal64(a.goods_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "销售金额(元)", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量", + ROUND("订单数量"/SUM("订单数量") OVER(PARTITION BY toYear(a.min_sale_time)),5) AS "订单占比" +FROM( + SELECT + MIN(sale_time) AS min_sale_time, + store_code, + receipt_no, + SUM(goods_amt) AS goods_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '销售' + AND sale_time >= '2022-01-01 00:00:00' + AND sale_time <'2025-07-01 00:00:00' + GROUP BY store_code,receipt_no +)a +LEFT JOIN( + SELECT + store_code, + MIN(province) AS province + FROM + custom_store_info_all_local csial + GROUP BY store_code +)b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.min_sale_time)) AND r.store_nature = a.store_nature +GROUP BY + "年份","省份" +ORDER BY + "年份","销售金额(元)" DESC; + +-- 2.1.2 线下每年国内各店铺所在等级城市销售金额、订单数量及其占比 +SELECT + toYear(a.min_sale_time) AS "年份", + CASE + WHEN c.city_grade = '' THEN '其他' + ELSE c.city_grade + END AS "城市等级", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.goods_amt + ELSE toDecimal64(toDecimal64(a.goods_amt,4)*toDecimal64(r.settle_ratio,4),2) + END) AS "销售金额(元)", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量", + ROUND("订单数量"/SUM("订单数量") OVER(PARTITION BY toYear(a.min_sale_time)),5) AS "订单占比" +FROM( + SELECT + MIN(sale_time) AS min_sale_time, + store_code, + receipt_no, + SUM(goods_amt) AS goods_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '销售' + AND sale_time >= '2022-01-01 00:00:00' + AND sale_time <'2025-07-01 00:00:00' + GROUP BY store_code,receipt_no +)a +LEFT JOIN( + SELECT + csial.store_code, + corcl.city AS city + FROM + custom_store_info_all_local csial + LEFT JOIN custom_offline_region_city_local corcl + ON csial.city = corcl.region +)b +ON a.store_code = b.store_code +LEFT JOIN( + SELECT + city, + city_grade + FROM + custom_city_grade_local +)c +ON b.city = c.city +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.min_sale_time)) AND r.store_nature = a.store_nature +GROUP BY + "年份","城市等级" +ORDER BY + "年份","销售金额(元)" DESC; + +-- 2.1.3 线下每年国外各国家销售金额、订单数量及占比 +SELECT + toYear(a.min_sale_time) AS "年份", + CASE + WHEN b.country = 'MY' THEN '马来西亚' + WHEN b.country = 'VN' THEN '越南' + WHEN b.country = 'SG' THEN '新加坡' + WHEN b.country = 'TH' THEN '泰国' + WHEN b.country = 'ID' THEN '印度尼西亚' + WHEN b.country = 'PH' THEN '菲律宾' + END AS "国家", + SUM(a.goods_amt*r.settle_ratio) AS "销售金额", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量", + ROUND("订单数量"/SUM("订单数量") OVER(PARTITION BY toYear(a.min_sale_time)),5) AS "订单占比" +FROM( + SELECT + MIN(sale_time) AS min_sale_time, + store_code, + receipt_no, + SUM(goods_amt) AS goods_amt, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_abroad_sale_return_settle_local + WHERE + sale_status = '销售' + AND sale_time >= '2022-01-01 00:00:00' + AND sale_time <'2025-07-01 00:00:00' + GROUP BY store_code,receipt_no +)a +LEFT JOIN( + SELECT + store_code, + MIN(country) AS country + FROM + dim_hkaudit_store_other_mt + GROUP BY store_code +)b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.min_sale_time)) AND r.store_nature = a.store_nature +GROUP BY + "年份","国家" +ORDER BY + "年份","销售金额" DESC; + +-- 3.1.1 线下每年单笔订单金额分布 +SELECT + toYear(a.saletime) AS "年份", + CASE + WHEN amt <200 THEN '<200' + WHEN amt >=200 AND amt <500 THEN '200-500' + WHEN amt >=500 AND amt <1000 THEN '500-1000' + WHEN amt >=1000 AND amt <2500 THEN '1000-2500' + WHEN amt >=2500 AND amt <5000 THEN '2500-5000' + WHEN amt >=5000 THEN '≥5000' + END AS "单笔订单销售金额(元)", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.order_amt + ELSE toDecimal64(toDecimal64(a.order_amt,4)*toDecimal64(r.settle_ratio,4),2) + END AS amt) AS "销售金额(元)", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量" +FROM( + SELECT + store_code, + receipt_no, + MIN(sale_time) AS saletime, + SUM(goods_amt) AS order_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '销售' + GROUP BY store_code, receipt_no + ) a +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份", "单笔订单销售金额(元)" +ORDER BY + "年份", + CASE + WHEN "单笔订单销售金额(元)"='<200' THEN 1 + WHEN "单笔订单销售金额(元)"='200-500'THEN 2 + WHEN "单笔订单销售金额(元)"='500-1000' THEN 3 + WHEN "单笔订单销售金额(元)"='1000-2500' THEN 4 + WHEN "单笔订单销售金额(元)"='2500-5000' THEN 5 + WHEN "单笔订单销售金额(元)"='1000-5000' THEN 6 + WHEN "单笔订单销售金额(元)"='≥5000' THEN 7 + END ASC; + +-- 3.1.2 线下每年各天订单数和销售金额 +-- 各天 +SELECT + toYear(a.saletime) AS "年份", + toDate(a.saletime) AS "日期", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.order_amt + ELSE toDecimal64(toDecimal64(a.order_amt,4)*toDecimal64(r.settle_ratio,4),2) + END AS amt) AS "销售金额", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量" +FROM ( + SELECT + store_code, + receipt_no, + MIN(sale_time) AS saletime, + SUM(goods_amt) AS order_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '销售' + GROUP BY store_code,receipt_no +) a +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份","日期" +order BY + "年份","日期"; + + +-- 3.1.2 线下每年各小时订单数和销售金额 +-- 各小时 +SELECT + toYear(a.saletime) AS "年份", + CONCAT(toString(HOUR(a.saletime)), '点到',toString(HOUR(a.saletime)+ 1), '点') AS "时间", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.order_amt + ELSE toDecimal64(toDecimal64(a.order_amt,4)*toDecimal64(r.settle_ratio,4),2) + END AS amt) AS "销售金额", + COUNT(DISTINCT CONCAT(a.store_code,a.receipt_no)) AS "订单数量" +FROM( + SELECT + store_code, + receipt_no, + MIN(sale_time) AS saletime, + SUM(goods_amt) AS order_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '销售' + GROUP BY store_code,receipt_no +) a +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份", "时间", HOUR(saletime) +ORDER BY + "年份", HOUR(saletime); + + +-- 3.1.3 线下每年大促期间店铺销售金额、订单数量 +SELECT + CASE + WHEN toDate(a.min_sale_time) BETWEEN '2022-01-01' AND '2022-01-05' THEN '海澜之家新年豪礼' + WHEN toDate(a.min_sale_time) BETWEEN '2022-06-15' AND '2022-06-19' THEN '海澜之家父亲节' + WHEN (toDate(a.min_sale_time) BETWEEN '2022-10-29' AND '2022-11-01') + OR (toDate(a.min_sale_time) BETWEEN '2022-11-05' AND '2022-11-11') THEN '海澜之家线下门店双十一' + WHEN toDate(a.min_sale_time) BETWEEN '2023-06-14' AND '2023-06-18' THEN '海澜之家2023父亲节' + WHEN toDate(a.min_sale_time) BETWEEN '2023-11-03' AND '2023-11-12' THEN '海澜之家2023双11购物狂欢节' + WHEN toDate(a.min_sale_time) BETWEEN '2024-01-26' AND '2024-01-28' THEN '海澜之家2024乘龙向上中国年' + WHEN toDate(a.min_sale_time) BETWEEN '2024-02-01' AND '2024-02-09' THEN '海澜之家2024迎新春送豪礼' + WHEN toDate(a.min_sale_time) BETWEEN '2024-06-13' AND '2024-06-16' THEN '海澜之家2024父亲节' + WHEN toDate(a.min_sale_time) BETWEEN '2025-01-26' AND '2025-01-28' THEN '海澜之家2025央央好物' + WHEN toDate(a.min_sale_time) BETWEEN '2025-06-11' AND '2025-06-15' THEN '海澜之家2025父亲节' + END AS "促销活动名称", + a.store_code AS "店铺编码", + b.store_name AS "店铺名称", + SUM(toDecimal64(toDecimal64(a.order_amt,4)*toDecimal64(r.settle_ratio,4),2)) AS "销售金额", + COUNT(DISTINCT a.store_code, a.receipt_no) AS "订单数量" +FROM( + SELECT + store_code, + receipt_no, + MIN(sale_time) AS min_sale_time, + SUM(goods_amt) AS order_amt, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '销售' + AND brand_code = 'HLA' + AND sale_time >= '2022-01-01 00:00:00' + AND sale_time < '2025-07-01 00:00:00' + AND ( + (sale_time >= '2022-01-01 00:00:00' AND sale_time <= '2022-01-05 23:59:59') + OR (sale_time >= '2022-06-15 00:00:00' AND sale_time <= '2022-06-19 23:59:59') + OR (sale_time >= '2022-10-29 00:00:00' AND sale_time <= '2022-11-01 23:59:59') + OR (sale_time >= '2022-11-05 00:00:00' AND sale_time <= '2022-11-11 23:59:59') + OR (sale_time >= '2023-06-14 00:00:00' AND sale_time <= '2023-06-18 23:59:59') + OR (sale_time >= '2023-11-03 00:00:00' AND sale_time <= '2023-11-12 23:59:59') + OR (sale_time >= '2024-01-26 00:00:00' AND sale_time <= '2024-01-28 23:59:59') + OR (sale_time >= '2024-02-01 00:00:00' AND sale_time <= '2024-02-09 23:59:59') + OR (sale_time >= '2024-06-13 00:00:00' AND sale_time <= '2024-06-16 23:59:59') + OR (sale_time >= '2025-01-26 00:00:00' AND sale_time <= '2025-01-28 23:59:59') + OR (sale_time >= '2025-06-11 00:00:00' AND sale_time <= '2025-06-15 23:59:59') + ) + GROUP BY store_code, receipt_no +) a +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.min_sale_time)) AND r.store_nature = a.store_nature +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local +) b +ON a.store_code = b.store_code +WHERE + CASE + WHEN toDate(a.min_sale_time) BETWEEN '2022-01-01' AND '2022-01-05' THEN '海澜之家新年豪礼' + WHEN toDate(a.min_sale_time) BETWEEN '2022-06-15' AND '2022-06-19' THEN '海澜之家父亲节' + WHEN (toDate(a.min_sale_time) BETWEEN '2022-10-29' AND '2022-11-01') + OR (toDate(a.min_sale_time) BETWEEN '2022-11-05' AND '2022-11-11') THEN '海澜之家线下门店双十一' + WHEN toDate(a.min_sale_time) BETWEEN '2023-06-14' AND '2023-06-18' THEN '海澜之家2023父亲节' + WHEN toDate(a.min_sale_time) BETWEEN '2023-11-03' AND '2023-11-12' THEN '海澜之家2023双11购物狂欢节' + WHEN toDate(a.min_sale_time) BETWEEN '2024-01-26' AND '2024-01-28' THEN '海澜之家2024乘龙向上中国年' + WHEN toDate(a.min_sale_time) BETWEEN '2024-02-01' AND '2024-02-09' THEN '海澜之家2024迎新春送豪礼' + WHEN toDate(a.min_sale_time) BETWEEN '2024-06-13' AND '2024-06-16' THEN '海澜之家2024父亲节' + WHEN toDate(a.min_sale_time) BETWEEN '2025-01-26' AND '2025-01-28' THEN '海澜之家2025央央好物' + WHEN toDate(a.min_sale_time) BETWEEN '2025-06-11' AND '2025-06-15' THEN '海澜之家2025父亲节' + END IS NOT NULL +GROUP BY + "促销活动名称", + a.store_code, + b.store_name +ORDER BY + MIN(toDate(a.min_sale_time)), + "销售金额" DESC; + +-- 5.1.1 线下各店铺每年度退款金额、退款订单数量 +SELECT + toYear(a.saletime) AS "年份", + a.store_code AS "店铺编码", + MIN(b.store_name) AS "店铺名称", + ABS(SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.refund_amt + ELSE toDecimal64(toDecimal64(a.refund_amt,4)*toDecimal64(r.settle_ratio,4),2) + END AS amt)) AS "退款金额(元)", + COUNT(CONCAT(a.store_code,a.receipt_no)) AS "退款订单数" +FROM( + SELECT + store_code, + receipt_no, + MIN(sale_time) AS saletime, + SUM(goods_amt) AS refund_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '退款' + GROUP BY store_code, receipt_no +) a +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +GROUP BY + "年份","店铺编码" +ORDER BY + toYear(a.saletime) ASC, "退款金额(元)" DESC; + + +-- 5.1.2 线下每年退款大于原销售的差异金额、订单数量 +SELECT + a.refund_year AS "年份", + SUM(CASE + WHEN CONCAT(b.store_code,b.receipt_no) <> '' THEN ABS(a.amt)- b.amt + WHEN CONCAT(b.store_code,b.receipt_no) = '' THEN 0 + END) AS "差异金额(有对应原单)", + COUNT( + CASE + WHEN CONCAT(b.store_code,b.receipt_no) <> '' THEN CONCAT(a.store_code,a.receipt_no) + WHEN CONCAT(b.store_code,b.receipt_no) = '' THEN NULL + END) AS "订单数量(有对应原单)", + SUM(CASE + WHEN CONCAT(b.store_code,b.receipt_no) <> '' THEN 0 + WHEN CONCAT(b.store_code,b.receipt_no) = '' THEN ABS(a.amt) + END) AS "差异金额(无对应原单)", + COUNT( + CASE + WHEN CONCAT(b.store_code,b.receipt_no) <> '' THEN NULL + WHEN CONCAT(b.store_code,b.receipt_no) = '' THEN CONCAT(a.store_code,a.receipt_no) + END) AS "订单数量(无对应原单)" +FROM( + SELECT + toYear(MIN(sale_time)) AS refund_year, + store_code, + receipt_no, + SUM(goods_amt) AS amt + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '退款' + GROUP BY + store_code,receipt_no +) a +LEFT JOIN( + SELECT + MIN(toYear(sale_time)), + store_code, + receipt_no, + SUM(goods_amt) AS amt + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '销售' + GROUP BY + store_code,receipt_no +) b +ON a.receipt_no = b.receipt_no AND a.store_code = b.store_code +WHERE + ABS(a.amt) > b.amt +GROUP BY + a.refund_year; + +-- 5.1.3 线下每年各月退款金额、退款订单数量 +SELECT + toYear(a.saletime) AS "年份", + toMonth(a.saletime) AS "月份", + ABS(SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.refund_amt + ELSE toDecimal64(toDecimal64(a.refund_amt,4)*toDecimal64(r.settle_ratio,4),2) + END AS amt)) AS "退款金额(元)", + COUNT(CONCAT(a.store_code,a.receipt_no)) AS "订单数量" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS refund_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local cosrl + WHERE sale_status = '退款' + GROUP BY + store_code,receipt_no + ) a +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份","月份" +ORDER BY + "年份" ASC,"月份" ASC; + +-- 5.1.4 线下每年订单退款金额分布 +SELECT + toYear(a.saletime) AS "年份", + CASE + WHEN amt >=0 AND amt <200 THEN '<200' + WHEN amt >=200 AND amt <500 THEN '200-500' + WHEN amt >=500 AND amt <1000 THEN '500-1000' + WHEN amt >=1000 AND amt <2500 THEN '1000-2500' + WHEN amt >=2500 AND amt <5000 THEN '2500-5000' + WHEN amt >=5000 THEN '≥5000' + END AS "单笔订单退款金额(元)", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.order_amt + ELSE toDecimal64(toDecimal64(a.order_amt,4)*toDecimal64(r.settle_ratio,4),2) + END AS amt) AS "退款金额(元)", + COUNT(CONCAT(a.store_code,a.receipt_no)) AS "订单数量" +FROM( + SELECT + store_code, + receipt_no, + MIN(sale_time) AS saletime, + ABS(SUM(goods_amt)) AS order_amt, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + WHERE + sale_status = '退款' + GROUP BY store_code,receipt_no + ) a +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份", "单笔订单退款金额(元)" +ORDER BY + "年份", + CASE + WHEN "单笔订单退款金额(元)"='<200' THEN 1 + WHEN "单笔订单退款金额(元)"='200-500'THEN 2 + WHEN "单笔订单退款金额(元)"='500-1000' THEN 3 + WHEN "单笔订单退款金额(元)"='1000-2500' THEN 4 + WHEN "单笔订单退款金额(元)"='2500-5000' THEN 5 + WHEN "单笔订单退款金额(元)"='1000-5000' THEN 6 + WHEN "单笔订单退款金额(元)"='≥5000' THEN 7 + END ASC; + + +-- 6.1.1 线下每年净销售金额前100订单净销售金额 +SELECT + toYear(a.saletime) AS "年份", + a.store_code AS "订单编号", + b.store_name AS "店铺名称", + a.receipt_no AS "订单号", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.net_sale + ELSE toDecimal64(toDecimal64(a.net_sale,4)*toDecimal64(r.settle_ratio,4),2) + END AS amt) AS "净销售金额(元)" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS net_sale, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + GROUP BY + store_code,receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY + toYear(a.saletime),a.store_code,b.store_name,a.receipt_no +ORDER BY + "净销售金额(元)" DESC +LIMIT 1000; + + + +-- 6.1.2 线下每年净销售金额前100订单各省份净销售金额 +WITH order_list_top_100 AS( + WITH order_list AS( + SELECT + toYear(a.saletime) AS sale_time, + a.store_code AS store_code, + b.store_name AS store_name, + a.receipt_no AS receipt_no, + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.net_sale + ELSE toDecimal64(toDecimal64(a.net_sale,4)*toDecimal64(r.settle_ratio,4),2) + END ) AS net_sale + FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS net_sale, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + GROUP BY + store_code,receipt_no + ) a + LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial + ) b + ON a.store_code = b.store_code + LEFT JOIN custom_settle_ratio_local r + ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature + GROUP BY + toYear(a.saletime),a.store_code,b.store_name,a.receipt_no + ) + SELECT + sale_time, + store_code, + receipt_no, + net_sale + FROM + order_list + WHERE + sale_time = 2022 + ORDER BY + net_sale DESC + LIMIT 100 + UNION ALL + SELECT + sale_time, + store_code , + receipt_no, + net_sale + FROM + order_list + WHERE + sale_time = 2023 + ORDER BY + net_sale DESC + LIMIT 100 + UNION ALL + SELECT + sale_time, + store_code , + receipt_no, + net_sale + FROM + order_list + WHERE + sale_time = 2024 + ORDER BY + net_sale DESC + LIMIT 100 + UNION ALL + SELECT + sale_time, + store_code , + receipt_no , + net_sale + FROM + order_list + WHERE + sale_time = 2025 + ORDER BY + net_sale DESC + LIMIT 100 +) +SELECT + toYear(a.saletime) AS "年份", + b.province AS "省份", + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.net_sale + ELSE toDecimal64(toDecimal64(a.net_sale,4)*toDecimal64(r.settle_ratio,4),2) + END AS amt) AS "净销售金额(元)", + COUNT(DISTINCT a.store_code,a.receipt_no) AS "订单数量" +FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS net_sale, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local cosrl + WHERE + CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM order_list_top_100) + GROUP BY + store_code,receipt_no +) a +LEFT JOIN( + SELECT + store_code, + store_name, + province + FROM custom_store_info_all_local +) b +ON a.store_code = b.store_code +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature +GROUP BY + "年份",b.province +ORDER BY + "年份","净销售金额(元)"DESC; + +-- 6.1.3 线下每年净销售金额前100订单各商品净销售金额 +WITH order_list_top_100 AS( + WITH order_list AS( + SELECT + toYear(a.saletime) AS sale_time, + a.store_code AS store_code, + b.store_name AS store_name, + a.receipt_no AS receipt_no, + SUM(CASE + WHEN a.brand_code IN ('JXH','SBZ') THEN a.net_sale + ELSE toDecimal64(toDecimal64(a.net_sale,4)*toDecimal64(r.settle_ratio,4),2) + END ) AS net_sale + FROM( + SELECT + MIN(sale_time) AS saletime, + store_code, + receipt_no, + SUM(goods_amt) AS net_sale, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local + GROUP BY + store_code,receipt_no + ) a + LEFT JOIN( + SELECT + store_code, + store_name + FROM + custom_store_info_all_local csial + ) b + ON a.store_code = b.store_code + LEFT JOIN custom_settle_ratio_local r + ON r.settle_year = toString(toYear(a.saletime)) AND r.store_nature = a.store_nature + GROUP BY + toYear(a.saletime),a.store_code,b.store_name,a.receipt_no + ) + SELECT + sale_time, + store_code, + receipt_no, + net_sale + FROM + order_list + WHERE + sale_time = 2022 + ORDER BY + net_sale DESC + LIMIT 100 + UNION ALL + SELECT + sale_time, + store_code , + receipt_no, + net_sale + FROM + order_list + WHERE + sale_time = 2023 + ORDER BY + net_sale DESC + LIMIT 100 + UNION ALL + SELECT + sale_time, + store_code , + receipt_no, + net_sale + FROM + order_list + WHERE + sale_time = 2024 + ORDER BY + net_sale DESC + LIMIT 100 + UNION ALL + SELECT + sale_time, + store_code , + receipt_no , + net_sale + FROM + order_list + WHERE + sale_time = 2025 + ORDER BY + net_sale DESC + LIMIT 100 +) +SELECT + toYear(a.sale_time) AS "年份", + a.barcode AS "商品编码", + CASE + WHEN b.goods_desc = '' THEN a.goods_name + WHEN b.goods_desc <> '' THEN b.goods_desc + END AS "商品名称", + SUM(a.qty) AS "产品数量", + SUM(toDecimal64(toDecimal64(a.goods_amt,4)*toDecimal64(a.settle_ratio,4),2)) AS "净销售金额(元)" +FROM( + SELECT + * + FROM + custom_offline_sale_return_settle_local cosrl + WHERE + CONCAT(store_code,receipt_no) IN (SELECT CONCAT(store_code,receipt_no) FROM order_list_top_100) +) a +LEFT JOIN( + SELECT barcode, MAX(goods_desc) AS goods_desc + FROM (SELECT barcode, goods_desc FROM dim_hkaudit_goods_mt WHERE country = 'CN' + UNION ALL + SELECT barcode, goods_desc FROM dim_hkaudit_goods_other_mt) + GROUP BY barcode +) b +ON a.barcode = b.barcode +GROUP BY toYear(a.sale_time),a.barcode,"商品名称" +ORDER BY "年份","净销售金额(元)" DESC; + + + +-- 6.2.1线下22年订单支付金额前20名注册用户的销售金额、订单数量 +SELECT + '2022' AS "年份", + a.member_id AS "注册用户ID", + SUM(CASE + WHEN c.brand_code IN ('SBZ','JXH') THEN c.amt + ELSE toDecimal64(toDecimal64(c.amt,4)*toDecimal64(r.settle_ratio,4),2) + END ) AS "销售金额(元)", + COUNT( + DISTINCT + CASE + WHEN c.receipt_no = '' THEN NULL + ELSE CONCAT(c.store_code,c.receipt_no) + END) AS "订单数量" +FROM( + SELECT + member_register_time AS r_time, + member_id + FROM dwd_basic_all_vip_info_dd dbavid + WHERE + SUBSTR(member_register_time,1,4) IN ('2022') +) a +LEFT JOIN( + SELECT + MIN(member_id) AS member_id , + bill_no + FROM dwd_basic_all_vip_point_dd + WHERE bill_no <>'' + AND SUBSTR(change_time,1,4) IN ('2022') + GROUP BY bill_no +) b +ON a.member_id = b.member_id +LEFT JOIN( + SELECT + receipt_no, + SUM(goods_amt) AS amt, + MIN(sale_time) AS saletime, + store_code, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local cosrl + WHERE + sale_status = '销售' + GROUP BY store_code,receipt_no +) c +ON b.bill_no = c.receipt_no +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(c.saletime)) AND r.store_nature = c.store_nature +GROUP BY a.member_id +ORDER BY SUM(c.amt) DESC +LIMIT 20; + + +-- 6.2.1线下23年订单支付金额前20名注册用户的销售金额、订单数量 +SELECT + '2023' AS "年份", + a.member_id AS "注册用户ID", + SUM(CASE + WHEN c.brand_code IN ('SBZ','JXH') THEN c.amt + ELSE toDecimal64(toDecimal64(c.amt,4)*toDecimal64(r.settle_ratio,4),2) + END ) AS "销售金额(元)", + COUNT( + DISTINCT + CASE + WHEN c.receipt_no = '' THEN NULL + ELSE CONCAT(c.store_code,c.receipt_no) + END) AS "订单数量" +FROM( + SELECT + member_register_time AS r_time, + member_id + FROM dwd_basic_all_vip_info_dd dbavid + WHERE + SUBSTR(member_register_time,1,4) IN ('2023') +) a +LEFT JOIN( + SELECT + MIN(member_id) AS member_id , + bill_no + FROM dwd_basic_all_vip_point_dd + WHERE bill_no <>'' + AND SUBSTR(change_time,1,4) IN ('2023') + GROUP BY bill_no +) b +ON a.member_id = b.member_id +LEFT JOIN( + SELECT + receipt_no, + SUM(goods_amt) AS amt, + MIN(sale_time) AS saletime, + store_code, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local cosrl + WHERE + sale_status = '销售' + GROUP BY store_code,receipt_no +) c +ON b.bill_no = c.receipt_no +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(c.saletime)) AND r.store_nature = c.store_nature +GROUP BY a.member_id +ORDER BY SUM(c.amt) DESC +LIMIT 20; + + +-- 6.2.1线下24年订单支付金额前20名注册用户的销售金额、订单数量 +SELECT + '2024' AS "年份", + a.member_id AS "注册用户ID", + SUM(CASE + WHEN c.brand_code IN ('SBZ','JXH') THEN c.amt + ELSE toDecimal64(toDecimal64(c.amt,4)*toDecimal64(r.settle_ratio,4),2) + END ) AS "销售金额(元)", + COUNT( + DISTINCT + CASE + WHEN c.receipt_no = '' THEN NULL + ELSE CONCAT(c.store_code,c.receipt_no) + END) AS "订单数量" +FROM( + SELECT + member_register_time AS r_time, + member_id + FROM dwd_basic_all_vip_info_dd dbavid + WHERE + SUBSTR(member_register_time,1,4) IN ('2024') +) a +LEFT JOIN( + SELECT + MIN(member_id) AS member_id , + bill_no + FROM dwd_basic_all_vip_point_dd + WHERE bill_no <>'' + AND SUBSTR(change_time,1,4) IN ('2024') + GROUP BY bill_no +) b +ON a.member_id = b.member_id +LEFT JOIN( + SELECT + receipt_no, + SUM(goods_amt) AS amt, + MIN(sale_time) AS saletime, + store_code, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local cosrl + WHERE + sale_status = '销售' + GROUP BY store_code,receipt_no +) c +ON b.bill_no = c.receipt_no +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(c.saletime)) AND r.store_nature = c.store_nature +GROUP BY a.member_id +ORDER BY SUM(c.amt) DESC +LIMIT 20; + + +-- 6.2.1线下25年订单支付金额前20名注册用户的销售金额、订单数量 +SELECT + '2025' AS "年份", + a.member_id AS "注册用户ID", + SUM(CASE + WHEN c.brand_code IN ('SBZ','JXH') THEN c.amt + ELSE toDecimal64(toDecimal64(c.amt,4)*toDecimal64(r.settle_ratio,4),2) + END ) AS "销售金额(元)", + COUNT( + DISTINCT + CASE + WHEN c.receipt_no = '' THEN NULL + ELSE CONCAT(c.store_code,c.receipt_no) + END) AS "订单数量" +FROM( + SELECT + member_register_time AS r_time, + member_id + FROM dwd_basic_all_vip_info_dd dbavid + WHERE + SUBSTR(member_register_time,1,7) IN ('2025-01','2025-02','2025-03','2025-04','2025-05','2025-06') +) a +LEFT JOIN( + SELECT + MIN(member_id) AS member_id , + bill_no + FROM dwd_basic_all_vip_point_dd + WHERE bill_no <>'' + AND SUBSTR(change_time,1,7) IN ('2025-01','2025-02','2025-03','2025-04','2025-05','2025-06') + GROUP BY bill_no +) b +ON a.member_id = b.member_id +LEFT JOIN( + SELECT + receipt_no, + SUM(goods_amt) AS amt, + MIN(sale_time) AS saletime, + store_code, + MIN(brand_code) AS brand_code, + argMin(store_nature,sale_time) AS store_nature + FROM + custom_offline_sale_return_settle_local cosrl + WHERE + sale_status = '销售' + GROUP BY store_code,receipt_no +) c +ON b.bill_no = c.receipt_no +LEFT JOIN custom_settle_ratio_local r +ON r.settle_year = toString(toYear(c.saletime)) AND r.store_nature = c.store_nature +GROUP BY a.member_id +ORDER BY SUM(c.amt) DESC +LIMIT 20; + +