Pesquisar na Comunidade
Mostrando resultados para as tags ''postgresql;converção sql server''.
Encontrado 1 registro
-
Eu quero converter o script abaixo para postgresql e minha dificuldade esta em retornar uma tabela com os dados já processados --Retorna Saldo_inicial,Entrada,Siada e Saldo_final do Mês declare @idEmpresa int; set @idEmpresa= '1'; declare @dataInicial datetime, @dataFinal datetime; set @dataInicial= convert(datetime, '01-11-2017', 103); set @dataFinal= convert(datetime, '30-11-2017', 103); set @dataFinal= dateadd(ms, -3, dateadd(day, +1, @dataFinal)); declare @inicioAno datetime; set @inicioAno= dateadd(year, datediff(year, 0, @dataInicial), 0); declare @saldoFinal numeric(12,2); set @saldoFinal= (SELECT sum(case when sit_flcx = 'Entrada' then +val_flcx else -val_flcx end) from tabflcx where emp_flcx = @idEmpresa and data_flcx >= @inicioAno and data_flcx < @dataInicial) set @saldoFinal = coalesce(@saldoFinal, 0); declare @MovPeriodo table (dataMov date primary key, sumEntrada numeric(12, 2), sumSaida numeric(12, 2)); INSERT into @MovPeriodo (dataMov, sumEntrada, sumSaida)SELECT cast(data_flcx as date), sum(case when sit_flcx = 'Entrada' then val_flcx else 0 end), sum(case when sit_flcx = 'Saída' then val_flcx else 0 end) from tabflcx where emp_flcx = @idEmpresa and data_flcx between @dataInicial and @dataFinal group by cast(data_flcx as date);declare @totalEntrada numeric(12, 2), @totalSaida numeric(12, 2);SELECT @totalEntrada= sum(sumEntrada) ,@totalSaida= sum(sumSaida)from @MovPeriodo;set @totalEntrada= coalesce(@totalEntrada, 0);set @totalSaida= coalesce(@totalSaida, 0);with cteDatas as (SELECT cast(@dataInicial as date) as Data union all SELECT dateadd(day, 1, Data) from cteDatas where Data < cast(@dataFinal as date))SELECT [Mes]= datename(month, D.Data),[Data]= convert(char(10), D.Data, 103), [Saldo_inicial]= @saldoFinal + IsNull((SELECT sum(Mx.sumEntrada - Mx.sumSaida) from @MovPeriodo as Mx where Mx.dataMov < D.Data), 0),[Entrada]= coalesce(M.sumEntrada, 0),[Saida]= coalesce(M.sumSaida, 0), [Saldo_final]= @saldoFinal + IsNull((SELECT sum(Mz.sumEntrada - Mz.sumSaida) from @MovPeriodo as Mz where Mz.dataMov <= D.Data),0) from cteDatas as D left join @MovPeriodo as M on M.dataMov = D.Data union all SELECT NULL, NULL, NULL, @totalEntrada, @totalSaida, NULL Eu dividi por etapas e cheguei até agora a este resultado (não satisfatório pois empaquei no retornar a tabela MovPeriodo): CREATE OR REPLACE FUNCTION SALDO_GERAL() RETURNS TABLE ( MES text, DATA timestamp, SALDO_INICIAL decimal, ENTRADA decimal, SAIDA decimal, SALDO_FINAL decimal ) as $$ --Retorna Saldo_inicial,Entrada,Siada e Saldo_final do Mês /*declare */ idEmpresa int:= '1'; dataInicial timestamp := to_date('01-11-2017','dd/mm/YYYY'); dataFinal timestamp := to_date('30-11-2017','dd/mm/YYYY')-Interval '3 ms'+Interval '1 day'; inicioAno timestamp := to_date('01/01/2017','dd/mm/YYYY'); saldoFinal numeric(12,2):= coalesce((SELECT sum(case when sit_flcx = 'Entrada' then +val_flcx else -val_flcx end) from tabflcx where emp_flcx = idEmpresa and data_flcx >= inicioAno and data_flcx < dataInicial),0); MovPeriodo record ; totalEntrada numeric(12, 2); totalSaida numeric(12, 2); /*BEGIN*/ SELECT cast(data_flcx as date), sum(case when sit_flcx = 'Entrada' then val_flcx else 0 end), sum(case when sit_flcx = 'Saída' then val_flcx else 0 end) /*INTO MovPeriodo*/ from tabflcx where emp_flcx = idEmpresa and data_flcx between dataInicial and dataFinal group by cast(data_flcx as date); /*END*/ $$ LANGUAGE sql; SELECT SALDO_GERAL() AS RETORNO;