create or alter procedure SP_ACOMPANHA_SALDO2 (
WPA_DATA_INICIAL date,
WPA_DATA_FINAL date)
returns (
RET_GRUPO varchar(100),
RET_DIA1 decimal(10,2),
RET_DIA2 decimal(10,2),
RET_DIA3 decimal(10,2),
RET_DIA4 decimal(10,2),
RET_DIA5 decimal(10,2),
RET_DIA6 decimal(10,2),
RET_DIA7 decimal(10,2),
RET_DIA8 decimal(10,2),
RET_DIA9 decimal(10,2),
RET_DIA10 decimal(10,2),
RET_DIA11 decimal(10,2),
RET_DIA12 decimal(10,2),
RET_DIA13 decimal(10,2),
RET_DIA14 decimal(10,2),
RET_DIA15 decimal(10,2),
RET_DIA16 decimal(10,2),
RET_DIA17 decimal(10,2),
RET_DIA18 decimal(10,2),
RET_DIA19 decimal(10,2),
RET_DIA20 decimal(10,2),
RET_DIA21 decimal(10,2),
RET_DIA22 decimal(10,2),
RET_DIA23 decimal(10,2),
RET_DIA24 decimal(10,2))
as
declare variable DATA_DISPONIVEL date;
begin
begin
for select GRUPO,
sum(iif(extract(day from s.data) = 1, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 2, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 3, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 4, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 5, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 6, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 7, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 8, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 9, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 10, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 11, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 12, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 13, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 14, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 15, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 16, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 17, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 18, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 19, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 20, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 21, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 22, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 23, PESO, 0)) as RET_DIA,
sum(iif(extract(day from S.DATA) = 24, PESO, 0)) as RET_DIA
from (select distinct cast(C.DTA as date) as DATA,
case
when UM.CODACESSOG in (3142, 3144, 3145, 3149, 6653, 6654, 6655, 7196, 7197, 7198, 7199, 7200, 7201, 7202, 7203, 7204, 7205) then 'CANTONEIRA GROSSA EQSE'
when C.NOME like '%PERFIL% %IND% %GALV%' then 'TELHAS'
when C.NOME like 'TUBO%' then 'TUBO'
when C.NOME like '%CH% %2Q%' then 'CHAPA 2Q'
when C.NOME like '%TIRA%EQSE%' then 'TIRA EQSE'
when C.COD_ACESSO_G = 6002 then 'TIRA RETRABALHO'
when C.NOME like '%TIRA%' then 'TIRA COMERCIAL'
when UM.CODACESSOG in (3776, 2050, 1098, 1104, 1107, 1304, 1099, 1138, 1100, 1103, 1097, 3774, 3775, 1560) then 'RECORTE'
when C.NOME like '%CANTONEIRA%' then 'CANTONEIRA FINA EQSE'
when UM.CODACESSOG = 3702 then 'CANTONEIRA FINA EQSE'
when C.NOME like 'PERFIL% %EQSE%' then 'PERFIL EQSE'
when C.NOME like 'PERFIL%' then 'PERFIL EQSE'
when C.NOME like 'EQSE%' then 'PERFIL EQSE'
when C.NOME like '%PROMO%' then 'PERFIL EQSE'
when C.NOME like '%2Q% %PERFIL%' then 'PERFIL EQSE'
when C.NOME like '%PAINEL 2Q%' then 'PERFIL EQSE'
else 'NAO TEM GRUPO'
end as GRUPO,
sum(UM.PLIQUI * C.ESTOQUE_ATU) as PESO
from TB_RELATORIO_PCP C
inner join ARQES01 UM on C.COD_ACESSO_G = UM.CODACESSOG
where C.DTA between :WPA_DATA_INICIAL and :WPA_DATA_FINAL and
extract(weekday from C.DTA) not in (0, 6) and
C.NOME not like '%NAO TEM GRUPO%'
group by 1, 2) S
group by 1
into :RET_GRUPO, :RET_DIA1, :RET_DIA2, :RET_DIA3, :RET_DIA4, :RET_DIA5, :RET_DIA6, :RET_DIA7, :RET_DIA8,
:RET_DIA9, :RET_DIA10, :RET_DIA11, :RET_DIA12, :RET_DIA13, :RET_DIA14, :RET_DIA15, :RET_DIA16,
:RET_DIA17, :RET_DIA18, :RET_DIA19, :RET_DIA20, :RET_DIA21, :RET_DIA22, :ret_dia23, :RET_DIA24
do
begin
--V_CURRENT_DATE = V_CURRENT_DATE + 1;
suspend;
end
--V_CURRENT_DATE = V_CURRENT_DATE + 1;
-- Avança para o próximo dia
end
end
Eu criei essa procedure, para "pivotar" as datas como colunas. Somo os pesos dos grupos, na data especifica. Criei as colunas fixas, mas para o que preciso no momento, me atende um pouco. O único problema que estou enfrentando é com dias que não tem movimentação, feriados e fins de semana, onde as colunas ficam zeradas. Queria uma forma de só considerar os dias úteis, o problema é que dentro do case passo o dia estático. Não encontrei solução melhor para isso.
Eu também criei uma procedure que gera um select dinâmico que lista as datas e já retorna uma strinh com a consulta nova. Mas não sei como executar o resultado dessa procedure, por isso estou tentando esse forma. Mas ainda não desisti da outra