拉链表使用

某一天的数据  

日期ACCT_DT大于等于start_dt,小于end_dt

ACCT_DT  between start_dt AND end_dt-1

start_dt<=to_Date('20200801','yyyyMMdd') and end_dt>to_Date('20200801','yyyyMMdd')

 

拉链表某段时间的最新数据 如2020/08/01到2019/08/31

要取开始日期在 8/01到8/31 之间,且结束日期要大于 8/31

结果为,其他的几条数据失效了

最终结果

取一段时间每天的拉链数据

一段时间,要group by出来每天,然后拿每天的日期去ACCT_DT  between start_dt AND end_dt-1这样才能拉链到当天的数据

with s as(
select
		a.ACCT_DT,
		b.Setl_Transfer_Cd Setl_Transfer_Cd_fa ,  --'发件转运中心编码'  先对发件进行汇总
		b.Setl_Transfer_Nm Setl_Transfer_Nm_fa ,  --'发件转运中心名称'
		a.Signoff_Setl_Cd Signoff_Setl_Cd ,  --'签收转运中心编码'
		--a.Signoff_Setl_Nm  Signoff_Setl_Nm,  --'签收转运中心名称'
		sum(Quantity) Quantity,		   --件量
		sum(Dlv_Out_Amt) Dlv_Out_Amt,
		sum(Add_Dlv_Amt) Add_Dlv_Amt,
		sum(Over_Weight_Out_Amt) Over_Weight_Out_Amt,
		sum(Alone_Out_Amt) Alone_Out_Amt,
		sum(Bottom_Sppt_Out_Amt) Bottom_Sppt_Out_Amt,
		sum(Second_Third_Out_Amt) Second_Third_Out_Amt,
		sum(Other_Out_Amt) Other_Out_Amt,
		sum(Total_Amt) Total_Amt
	from
		(select
			CAST(Bill_Audi_Dttm AS DATE FORMAT 'YYYYMMDD') ACCT_DT,	  -- ACCT_DT 切成年月日
			trim(Send_Setl_Cd) Send_Setl_Cd ,					--'发件结算网点'
			--Send_Setl_Nm,                                    --'发件结算网点名称'
			trim(Signoff_Setl_Cd) Signoff_Setl_Cd,             --'签收结算网点'
			--Signoff_Setl_Nm ,                                --'签收结算网点名称'
			sum(Quantity) Quantity,						     --件量
			sum(Dlv_Out_Amt) Dlv_Out_Amt,                    --'物料派费'
			sum(Add_Dlv_Amt) Add_Dlv_Amt,                    --'差额派费'
			sum(Over_Weight_Out_Amt) Over_Weight_Out_Amt,    --'超重费(出港)'
			sum(Alone_Out_Amt) Alone_Out_Amt,                --'单带派费(出港)'
			sum(Bottom_Sppt_Out_Amt) Bottom_Sppt_Out_Amt,    --'末端扶持(出港)'
			sum(Second_Third_Out_Amt) Second_Third_Out_Amt,  --'二三级费用(出港)'
			sum(Other_Out_Amt) Other_Out_Amt,                --'其他费用(出港)'
			sum(Total_Amt) Total_Amt                          --'总金额'
		from Pv_PMART_stl.shipment_setl_deli_out_dtl 
		where CAST(Bill_Audi_Dttm AS DATE FORMAT 'YYYYMMDD') between to_Date('20200801','yyyyMMdd') and to_Date('20200831','yyyyMMdd') --账单审核时间  带有年月日 时分秒
		and substring(Shipment_No,1,6)<>'YT1332'                          --非同城件
		and Send_Setl_Cd is not null and Signoff_Setl_Cd is not null
		group by 1,2,3) a
	inner join 
		(
			select
				Setl_Transfer_Cd ,  --'结算转运中心编码'
				Setl_Transfer_Nm ,  --'结算转运中心名称'
				Branch_Cd ,         --'网点编码'
				Branch_Nm,           --'网点名称'
				start_dt,
				end_dt
			from  Pt_PMART_CEO.dmn_org WHERE Setl_Transfer_Cd IS NOT NULL
			and Org_Type_Nm='BRANCH'
			--and Setl_Transfer_Cd='871906'                      --昆明中转中心
		) b on a.Send_Setl_Cd=b.Branch_Cd		--发件网点关联
		AND ACCT_DT  between start_dt AND end_dt-1
	group by 1,2,3,4
)

select
	--s.a.acct_dt,
	s.Setl_Transfer_Cd_fa ,  --'发件转运中心编码'
    s.Setl_Transfer_Nm_fa ,  --'发件转运中心名称'
	c.Setl_Transfer_Cd ,  --'签收转运中心编码'       --再对签收汇总
    c.Setl_Transfer_Nm ,  --'签收转运中心名称'
	sum(Quantity),									--件量
	sum(Dlv_Out_Amt),
	sum(Add_Dlv_Amt),
	sum(Over_Weight_Out_Amt),
	sum(Alone_Out_Amt),
	sum(Bottom_Sppt_Out_Amt),
	sum(Second_Third_Out_Amt),
	sum(Other_Out_Amt),
	sum(Total_Amt)
from s inner join 
	(
		select
			Setl_Transfer_Cd ,  --'结算转运中心编码'
			Setl_Transfer_Nm ,  --'结算转运中心名称'
			Branch_Cd ,         --'网点编码'
			Branch_Nm,           --'网点名称'
			start_dt,
			end_dt
		from  Pt_PMART_CEO.dmn_org WHERE Setl_Transfer_Cd IS NOT NULL
		and Org_Type_Nm='BRANCH'
	) c on s.Signoff_Setl_Cd=c.Branch_Cd     --签收网点关联
	and ACCT_DT  between start_dt AND end_dt-1
group by 1,2,3,4

猜你喜欢

转载自blog.csdn.net/someInNeed/article/details/108716116