• 数据开发(二)


    一、

    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
    

     

  • 相关阅读:
    修改 MyEclipse 中的 jsp 和 servlet 模板
    javaWeb 数据库连接池连接数据库
    发现一个类的方法不够用时,可以使用的3种方法可以增强
    使用 greenDao 框架 操作数据库
    Android之使用Volley框架在ListView中加载大量图片
    js日期选择控件
    mysql 乱码问题
    java 使用反射技术解耦
    javaWeb 使用jsp开发 html过滤标签
    javaWeb 使用jsp开发 foreach 标签
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/9428636.html
Copyright © 2020-2023  润新知