ALTER proc [dbo].[qy_ttt]
as
select convert(date,日期,120) as 日期,substring(别名,1,4)+RIGHT('00' + CONVERT(VARCHAR, substring(别名,5,2)), 2) as 别名 ,convert(nvarchar(100),类型) as 类型, convert( decimal(28,4),sum(case when 班次='白班' then 数量 else 0 end )) as 白班, convert(decimal(28,4),sum(case when 班次='晚班' then 数量 else 0 end ))as 夜班
into #tempabc
from (
select 日期,别名,班次,(case substring(数量类型,1,1) when 1 then '1实际产能' when 2 then '2入库数' else '5退不良' end ) as 类型 ,数量
from UFDATA_001_2015..BI_MES_RPT_DJQuery
where isnull(数量,0)<>0 and 数量类型 like '[1,2,3]%') z
group by 日期,别名,类型
----select * from #tempabc where 别名='清溪产线9' and 日期='2022-05-25'
----3堆积数=1实际产能-2入库数
insert into #tempabc
select 日期,别名,'3堆积数' ,sum((case when 类型='1实际产能' then 白班 else 0 end )-(case when 类型='2入库数' then 白班 else 0 end )) as 白班
,sum((case when 类型='1实际产能' then 夜班 else 0 end)-(case when 类型='2入库数' then 夜班 else 0 end)) as夜班
from #tempabc
group by 日期,别名
-----4堆积比例 =3堆积数/1实际产能 如果产能为0则比例为0
insert into #tempabc
select 日期,别名,'4堆积比例' , round((case when sum(case when 类型='1实际产能' then 白班 else 0 end )=0 then 0 else sum(case when 类型='3堆积数' then 白班 else 0 end )/sum(case when 类型='1实际产能' then 白班 else 0 end ) end),4)
,round(( case when sum(case when 类型='1实际产能' then 夜班 else 0 end)=0 then 0 else sum(case when 类型='3堆积数' then 夜班 else 0 end)/sum(case when 类型='1实际产能' then 夜班 else 0 end) end ),4)
from #tempabc
--- where 别名='清溪产线1' and 日期='2022-05-03'
group by 日期,别名
-----6 实际堆积=1实际产能-2良品入库-5退不良
insert into #tempabc
select 日期,别名,'6实际堆积' ,sum((case when 类型='1实际产能' then 白班 else 0 end )-(case when 类型='2入库数' then 白班 else 0 end )-(case when 类型='5退不良' then 白班 else 0 end )) as 白班
,sum((case when 类型='1实际产能' then 夜班 else 0 end)-(case when 类型='2入库数' then 夜班 else 0 end)-(case when 类型='5退不良' then 夜班 else 0 end)) as 夜班
from #tempabc
group by 日期,别名
-----7退不良比例
insert into #tempabc
select 日期,别名,'7退不良比例' , round((case when sum(case when 类型='1实际产能' then 白班 else 0 end )=0 then 0 else sum(case when 类型='5退不良' then 白班 else 0 end )/sum(case when 类型='1实际产能' then 白班 else 0 end ) end),4)
,round(( case when sum(case when 类型='1实际产能' then 夜班 else 0 end)=0 then 0 else sum(case when 类型='5退不良' then 夜班 else 0 end)/sum(case when 类型='1实际产能' then 夜班 else 0 end) end ),4)
from #tempabc
group by 日期,别名
----8良品入库率= 2良品入库/1实际产能
insert into #tempabc
select 日期,别名,'8良品入库率' , round((case when sum(case when 类型='1实际产能' then 白班 else 0 end )=0 then 0 else sum(case when 类型='2入库数' then 白班 else 0 end )/sum(case when 类型='1实际产能' then 白班 else 0 end ) end),4)
,round(( case when sum(case when 类型='1实际产能' then 夜班 else 0 end)=0 then 0 else sum(case when 类型='2入库数' then 夜班 else 0 end)/sum(case when 类型='1实际产能' then 夜班 else 0 end) end ),4)
from #tempabc
group by 日期,别名
----9实际堆积比例=6实际堆积/1实际产能
insert into #tempabc
select 日期,别名,'9实际堆积比例' , round((case when sum(case when 类型='1实际产能' then 白班 else 0 end )=0 then 0 else sum(case when 类型='6实际堆积' then 白班 else 0 end )/sum(case when 类型='1实际产能' then 白班 else 0 end ) end),4)
,round(( case when sum(case when 类型='1实际产能' then 夜班 else 0 end)=0 then 0 else sum(case when 类型='6实际堆积' then 夜班 else 0 end)/sum(case when 类型='1实际产能' then 夜班 else 0 end) end ),4)
from #tempabc
group by 日期,别名
select *
from #tempabc
order by 日期,别名,类型
GO
|