数据开发(二)

一、

1、建立原始表

drop table dev.temp_app_eclp_coo_cx_store_detail_2;
create table dev.temp_app_eclp_coo_cx_store_detail_2 as
select
	b.so_no as so_no, --ECLP单号(主键1)
	c.sp_so_no, --销售平台单号
	c.create_time, --创建时间
	c.goods_no as goods_no, --商品SKU编号(主键2)
	c.goods_name as goods_name, --商品名称
	c.store_name as store_name, --仓库名称
	c.store_cate_name as store_cate_name, --仓库分类名称
	c.store_subd_name as store_subd_name, --仓库分公司名称
	c.store_delv_center_name as store_delv_center_name, --仓库配送中心维名称
	c.store_region_name as store_region_name, --仓库所在区域名称
	c.store_settleame as store_settleame, --仓库机构名称
	c.store_cate_new_name as store_cate_new_name, --仓库分类名称(new)
	c.store_garden_name as store_garden_name, --仓库园区名称
	c.org_name, --发货区域名称
	c.distribution_network, --配送网络(大件、中小件B网、中小件C网)(新加)
	c.cate1_name, --商品一级分类名称
	c.cate2_name, --商品二级分类名称
	c.cate3_name, --商品三级分类名称
	c.brand_name, --品牌名称
	c.wms_rec_qtty, --商品件数
	c.sale_ord_dt, --销售订单订购日期
	c.jit_tm, --波次时间
	c.ord_end_tm, --订单生产截止时间
	c.ord_complete_tm, --订单完成时间
	c.pre_sorting_tm, --预分拣时间
	c.wms_rec_tm, --WMS接收时间
	substr(b.wms_rec_tm, 1, 10) as wms_rec_dt, --WMS接收日期
	c.print_tm, --打印时间
	b.pickup_tm, --拣货完成时间
	c.recheck_tm, --复核时间
	b.package_tm, --打包时间
	case
		when c.package_tm is null
		then '0'
		when c.wms_rec_tm is null
		then '0'
		else cast(hour(cast(b.pickup_tm as timestamp) - cast(b.wms_rec_tm as timestamp)) * 60 + minute(cast(b.pickup_tm as timestamp) - cast(b.wms_rec_tm as timestamp)) + second(cast(b.pickup_tm as timestamp) - cast(b.wms_rec_tm as timestamp)) / 60 as bigint)
	end as pickup_wms_minute, -- WMS—拣货完成 分钟数 系统时间
	case
		when c.package_tm is null
		then '0'
		when c.pickup_tm is null
		then '0'
		else cast(hour(cast(b.package_tm as timestamp) - cast(b.pickup_tm as timestamp)) * 60 + minute(cast(b.package_tm as timestamp) - cast(b.pickup_tm as timestamp)) + second(cast(b.package_tm as timestamp) - cast(b.pickup_tm as timestamp)) / 60 as bigint)
	end as package_pickup_minute, -- 拣货-打包完成 分钟数 生产时间
	case
		when c.pickup_tm is not null
		then '1'
		else '0'
	end as is_pickup, --是否拣货 0订单无拣货 1订单有拣货
	case
		when c.recheck_tm is not null
		then '1'
		else '0'
	end as is_recheck, --是否复核 0订单无复核 1订单有复核
	case
		when c.package_tm is not null
		then '1'
		else '0'
	end as is_package--是否打包 0订单无打包 1订单有打包
from
	(
		select
			a.so_no as so_no, --订单号
			min(wms_rec_tm) as wms_rec_tm, --最小接收时间
			min(pickup_tm) as pickup_tm, --最小拣货时间
			max(package_tm) as package_tm --最大打包时间
		from
			dev.temp_app_eclp_coo_cx_store_detail a
		group by
			so_no     --去重方式
	)
	b
left join dev.temp_app_eclp_coo_cx_store_detail c
on
	c.so_no = b.so_no
	and c.wms_rec_tm = b.wms_rec_tm
	--and c.pickup_tm = b.pickup_tm
	--and c.package_tm = b.package_tm

 至今已grpup by 的去重方式。

2、多重group by的建表语句

一定注意,group by 要么分类里的字段能用,要么就得用聚合函数计算的值才能用。

create table dev.temp_app_eclp_coo_cx_store_detail_3 as  --建表
select
	substr(create_time, 1, 7) as mm,  --年月
	case
		when substr(create_time, 7, 1) = '6'
		then substr(create_time, 1, 10) --6月的话,年月日
		else substr(create_time, 1, 7) --非6月,年月(默认都为该月的1号)
	end as dd,
        store_name,
	store_cate_name,
	store_subd_name,
	store_delv_center_name, --仓库配送中心维名称
	store_region_name, --仓库所在区域名称
	store_settleame, --仓库机构名称
	store_cate_new_name, --仓库分类名称(new)
	store_garden_name, --仓库园区名称
	org_name, --发货区域名称
	distribution_network, --配送网络(大件、中小件B网、中小件C网)(新加)
	sum(nvl(pickup_wms_minute, 0)) as pickup_wms_minute,  --NVL(ARG,VALUE)达标如果前面的ARG值为NULL那么返回的值为后面的VALUE。
	sum(nvl(package_pickup_minute, 0)) as package_pickup_minute,
	count(DISTINCT so_no) as cnt
from
	dev.temp_app_eclp_coo_cx_store_detail_2
group by
	substr(create_time, 1, 7),
	case
		when substr(create_time, 7, 1) = '6'
		then substr(create_time, 1, 10)
		else substr(create_time, 1, 7)
	end,
        store_name,
	store_cate_name,
	store_subd_name,
	store_delv_center_name, --仓库配送中心维名称
	store_region_name, --仓库所在区域名称
	store_settleame, --仓库机构名称
	store_cate_new_name, --仓库分类名称(new)
	store_garden_name, --仓库园区名称
	org_name, --发货区域名称
	distribution_network

4月数据

6月数据

 

3、618程序

################################################################################# dev.temp_app_eclp_coo_cx_store_detail 建表 ###############
#难点计算时间差,取出原始订单数据 drop table dev.temp_app_eclp_coo_cx_store_detail; create table dev.temp_app_eclp_coo_cx_store_detail as select a.sale_ord_ob_id as so_no, --ECLP单号(主键1) b.sp_so_no, --销售平台单号 b.create_time, --创建时间 a.item_sku_id as goods_no, --商品SKU编号(主键2) a.item_name as goods_name, --商品名称 a.dim_store_name as store_name, --仓库名称 a.wh_cate_desc as store_cate_name, --仓库分类名称 a.dim_subd_name as store_subd_name, --仓库分公司名称 a.dim_delv_center_name as store_delv_center_name, --仓库配送中心维名称 a.region_name as store_region_name, --仓库所在区域名称 a.settleame as store_settleame, --仓库机构名称 a.wh_cate_desc_new as store_cate_new_name, --仓库分类名称(new) a.garden_name as store_garden_name, --仓库园区名称 c.org_name, --发货区域名称 c.distribution_network, --配送网络(大件、中小件B网、中小件C网)(新加) b.cate1_name, --商品一级分类名称 b.cate2_name, --商品二级分类名称 b.cate3_name, --商品三级分类名称 b.brand_name, --品牌名称 a.wms_rec_qtty, --商品件数 a.sale_ord_dt, --销售订单订购日期 a.jit_tm, --波次时间 a.ord_end_tm, --订单生产截止时间 a.ord_complete_tm, --订单完成时间 a.pre_sorting_tm, --预分拣时间 a.wms_rec_tm, --WMS接收时间 substr(a.wms_rec_tm, 1, 10) as wms_rec_dt, --WMS接收日期 a.print_tm, --打印时间 a.pickup_tm, --拣货完成时间 a.recheck_tm, --复核时间 a.package_tm, --打包时间 case when a.package_tm is null then '0' when a.wms_rec_tm is null then '0' else cast(hour(cast(a.pickup_tm as timestamp) - cast(a.wms_rec_tm as timestamp)) * 60 + minute(cast(a.pickup_tm as timestamp) - cast(a.wms_rec_tm as timestamp)) + second(cast(a.pickup_tm as timestamp) - cast(a.wms_rec_tm as timestamp)) / 60 as bigint) end as pickup_wms_minute, -- WMS—拣货完成 分钟数 系统时间 case when a.package_tm is null then '0' when a.pickup_tm is null then '0' else cast(hour(cast(a.package_tm as timestamp) - cast(a.pickup_tm as timestamp)) * 60 + minute(cast(a.package_tm as timestamp) - cast(a.pickup_tm as timestamp)) + second(cast(a.package_tm as timestamp) - cast(a.pickup_tm as timestamp)) / 60 as bigint) end as package_pickup_minute, -- 拣货-打包完成 分钟数 生产时间 case when a.pickup_tm is not null then '1' else '0' end as is_pickup, --是否拣货 0订单无拣货 1订单有拣货 case when a.recheck_tm is not null then '1' else '0' end as is_recheck, --是否复核 0订单无复核 1订单有复核 case when a.package_tm is not null then '1' else '0' end as is_package--是否打包 0订单无打包 1订单有打包 from dev.temp_app_eclp_coo_cx_store a left join dev.temp_app_eclp_coo_cx_order_det b --胡文博表 on a.sale_ord_ob_id = b.so_no and a.item_sku_id = b.goods_no left join dev.temp_app_eclp_coo_cx_waybill c --刘银苹表 on a.sale_ord_ob_id = c.so_no ; ##################################################################################### dev.temp_app_eclp_coo_cx_store_detail_2建表############################
#找出最小的接收时间,最小的拣货时间,最大的打包时间,但是由于是自连接join,所以有重复的情况。 drop table dev.temp_app_eclp_coo_cx_store_detail_2; create table dev.temp_app_eclp_coo_cx_store_detail_2 as select b.so_no as so_no, --ECLP单号(主键1) c.sp_so_no, --销售平台单号 c.create_time, --创建时间 c.goods_no as goods_no, --商品SKU编号(主键2) c.goods_name as goods_name, --商品名称 c.store_name as store_name, --仓库名称 c.store_cate_name as store_cate_name, --仓库分类名称 c.store_subd_name as store_subd_name, --仓库分公司名称 c.store_delv_center_name as store_delv_center_name, --仓库配送中心维名称 c.store_region_name as store_region_name, --仓库所在区域名称 c.store_settleame as store_settleame, --仓库机构名称 c.store_cate_new_name as store_cate_new_name, --仓库分类名称(new) c.store_garden_name as store_garden_name, --仓库园区名称 c.org_name, --发货区域名称 c.distribution_network, --配送网络(大件、中小件B网、中小件C网)(新加) c.cate1_name, --商品一级分类名称 c.cate2_name, --商品二级分类名称 c.cate3_name, --商品三级分类名称 c.brand_name, --品牌名称 c.wms_rec_qtty, --商品件数 c.sale_ord_dt, --销售订单订购日期 c.jit_tm, --波次时间 c.ord_end_tm, --订单生产截止时间 c.ord_complete_tm, --订单完成时间 c.pre_sorting_tm, --预分拣时间 c.wms_rec_tm, --WMS接收时间 substr(b.wms_rec_tm, 1, 10) as wms_rec_dt, --WMS接收日期 c.print_tm, --打印时间 b.pickup_tm, --拣货完成时间 c.recheck_tm, --复核时间 b.package_tm, --打包时间 case when c.package_tm is null then '0' when c.wms_rec_tm is null then '0' else cast(hour(cast(b.pickup_tm as timestamp) - cast(b.wms_rec_tm as timestamp)) * 60 + minute(cast(b.pickup_tm as timestamp) - cast(b.wms_rec_tm as timestamp)) + second(cast(b.pickup_tm as timestamp) - cast(b.wms_rec_tm as timestamp)) / 60 as bigint) end as pickup_wms_minute, -- WMS—拣货完成 分钟数 系统时间 case when c.package_tm is null then '0' when c.pickup_tm is null then '0' else cast(hour(cast(b.package_tm as timestamp) - cast(b.pickup_tm as timestamp)) * 60 + minute(cast(b.package_tm as timestamp) - cast(b.pickup_tm as timestamp)) + second(cast(b.package_tm as timestamp) - cast(b.pickup_tm as timestamp)) / 60 as bigint) end as package_pickup_minute, -- 拣货-打包完成 分钟数 生产时间 case when c.pickup_tm is not null then '1' else '0' end as is_pickup, --是否拣货 0订单无拣货 1订单有拣货 case when c.recheck_tm is not null then '1' else '0' end as is_recheck, --是否复核 0订单无复核 1订单有复核 case when c.package_tm is not null then '1' else '0' end as is_package--是否打包 0订单无打包 1订单有打包 from ( select a.so_no as so_no, --订单号 min(wms_rec_tm) as wms_rec_tm, --最小接收时间 min(pickup_tm) as pickup_tm, --最小拣货时间 max(package_tm) as package_tm --最大打包时间 from dev.temp_app_eclp_coo_cx_store_detail a group by so_no ) b left join dev.temp_app_eclp_coo_cx_store_detail c on c.so_no = b.so_no and c.wms_rec_tm = b.wms_rec_tm --and c.pickup_tm = b.pickup_tm --and c.package_tm = b.package_tm #################################################################################### dev.temp_app_eclp_coo_cx_store_detail_3 建表##################################
#group by 去重,把所有的数据找出来,放到一张Excel表中。 create table dev.temp_app_eclp_coo_cx_store_detail_3 as select substr(create_time, 1, 7) as mm, case when substr(create_time, 7, 1) = '6' then substr(create_time, 1, 10) else substr(create_time, 1, 7) end as dd, store_name, store_cate_name, store_subd_name, store_delv_center_name, --仓库配送中心维名称 store_region_name, --仓库所在区域名称 store_settleame, --仓库机构名称 store_cate_new_name, --仓库分类名称(new) store_garden_name, --仓库园区名称 org_name, --发货区域名称 distribution_network, --配送网络(大件、中小件B网、中小件C网)(新加) sum(nvl(pickup_wms_minute, 0)) as pickup_wms_minute, sum(nvl(package_pickup_minute, 0)) as package_pickup_minute, count(DISTINCT so_no) as cnt from dev.temp_app_eclp_coo_cx_store_detail_2 group by substr(create_time, 1, 7), case when substr(create_time, 7, 1) = '6' then substr(create_time, 1, 10) else substr(create_time, 1, 7) end, store_name, store_cate_name, store_subd_name, store_delv_center_name, --仓库配送中心维名称 store_region_name, --仓库所在区域名称 store_settleame, --仓库机构名称 store_cate_new_name, --仓库分类名称(new) store_garden_name, --仓库园区名称 org_name, --发货区域名称 distribution_network

 

二、

1、

select *  from lyp_dev_yuce_qtty

初始数据这样,有时间,标签,区域,库存值,现在需要按区域统计所有月份某一种标签的值,及其和。

2、

select
	substr(stat_dt, 1, 7) as stat_dt,
	band_name,
	loc_region,
	stock_qtty
from
	lyp_dev_yuce_qtty
where
	loc_region = '华东'

 将华东区域数据找出来。并没有每个月汇总的数据

3、每个月的汇总数据

select
	substr(stat_dt, 1, 7) as stat_dt,
	'#汇总' as band_name,
	'华东' as loc_region,
	sum(stock_qtty) as stock_qtty
from
	lyp_dev_yuce_qtty
where
	loc_region = '华东'
group by
	stat_dt

 

增加了个新标签,汇总值。

4、合并所有的值

select
	substr(stat_dt, 1, 7) as stat_dt,
	band_name,
	loc_region,
	stock_qtty
from
	lyp_dev_yuce_qtty
where
	loc_region = '华东'

union all

select
	substr(stat_dt, 1, 7) as stat_dt,
	'#汇总' as band_name,
	'华东' as loc_region,
	sum(stock_qtty) as stock_qtty
from
	lyp_dev_yuce_qtty
where
	loc_region = '华东'
group by
	stat_dt

 

 

转载于:https://www.cnblogs.com/ruo-li-suo-yi/p/9428636.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值