Usuário com melhor resposta
Cursor - Data + Function

Pergunta
-
Bom dia pessoal,
estou precisando carregar os dados de estoque para uma tabela, e, preciso que seja inserido o saldo do dia nesta tabela, por ex:
Item Data Saldo
001 11/01/2019 500
003 11/01/2019 300
001 12/01/2019 450
003 12/01/2019 350
Tenho uma function do SAP que traz estes dados pra mim, mas, como eu preciso fazer retroativo, gostaria de usar um cursor pra ir colocando as datas automaticamente pra mim.
A mesma data que passo por parâmetro na function teria que ser a data do campo [Data do Estoque]
A function que utilizo é esta:SELECT T0.ItemCode, T0.Quantity, T1.WhsName, '2019-11-30' AS [Data Estoque] FROM ufnStockAndCostHistory('2019-11-30','All') t0 JOIN OWHS T1 ON T1.WhsCode=T0.WhsCode where T0.whscode in ('0001','0004','0005','0006','0007','0008','0009','0010','0011','0013','EVD') ORDER BY 1
Seria possível ?
Obrigado à todos.
segunda-feira, 9 de dezembro de 2019 14:24
Respostas
-
Deleted
- Sugerido como Resposta IgorFKModerator segunda-feira, 9 de dezembro de 2019 16:55
- Marcado como Resposta Mateus Furrier Rosa segunda-feira, 9 de dezembro de 2019 17:42
segunda-feira, 9 de dezembro de 2019 15:03
Todas as Respostas
-
Mateus,
Quais os valores podem ser passados no segundo parâmetro da function ufnStockAndCostHistory?
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
segunda-feira, 9 de dezembro de 2019 16:43 -
Amigos, obrigado pela ajuda.
A function é esta abaixo.
O primeiro parâmetro é a data e, o segundo o item, contudo, eu vou colocar uma data por ex: 30/11/2019 (no script '2019-11-30' e o ponteiro preciso que faça recursivo, desde o início das nossas operações (06/2016 :P), mas posso fazer de 100 em 100 se for o caso também.
Gratidão à todos vocês !!CREATE FUNCTION [dbo].[ufnStockAndCostHistory] ( @EndDate DATETIME, @ItemCode NVARCHAR(255) = 'All' ) RETURNS TABLE AS RETURN ( WITH Cost AS ( SELECT OINM.TransNum, OINM.ItemCode, OINM.Warehouse, OINM.Balance, OINM.CreateDate FROM OINM (NOLOCK) JOIN OITM (NOLOCK) ON OITM.ItemCode = OINM.ItemCode JOIN OITB (NOLOCK) ON OITM.ItmsGrpCod=OITB.ItmsGrpCod WHERE OINM.CreateDate <= @EndDate ), FinalCostByWarehouse AS ( SELECT * FROM Cost WHERE TransNum = ( SELECT MAX(TransNum) FROM Cost sub WHERE Cost.ItemCode = sub.ItemCode AND Cost.Warehouse = sub.Warehouse) ), Quantity AS ( SELECT OINM.ItemCode, OINM.Warehouse, SUM(OINM.InQty) - SUM(OINM.OutQty) [Qty] FROM OINM (NOLOCK) JOIN OITM (NOLOCK) ON OITM.ItemCode = OINM.ItemCode JOIN OITB (NOLOCK) ON OITM.ItmsGrpCod=OITB.ItmsGrpCod WHERE OINM.CreateDate <= @EndDate group by OINM.ItemCode, OINM.Warehouse ) SELECT OITW.ItemCode, OITW.WhsCode, c.Balance [Cost], q.Qty [Quantity] FROM OITW LEFT JOIN FinalCostByWarehouse c ON OITW.ItemCode = c.ItemCode AND OITW.WhsCode = c.Warehouse LEFT JOIN Quantity q ON OITW.ItemCode = q.ItemCode AND OITW.WhsCode = q.Warehouse WHERE (OITW.ItemCode = @ItemCode OR @ItemCode = 'All') AND (ISNULL(c.Balance,0) > 0 OR ISNULL(q.Qty,0) > 0) )
segunda-feira, 9 de dezembro de 2019 17:06 -
Mateus,
O resultado processado por esta Function retornado em um tabela criada dentro da função, de alguma forma será reaproveitado somente na sua query ou armazenado em alguma outra tabela?
Pois analisando o seu código tenho a impressão que o conjunto de resultados gerados poderá ser útil justamente para filtrar as dados que seja, mas não apresenta uma forma de controle.
Por isso estou perguntando se você iria direcionar ele para alguma outra tabela?
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
segunda-feira, 9 de dezembro de 2019 18:04 -
Deu certinho o seu cursor José,
Eu estou populando uma tabela (Para utilizar no Qliksense posteriormente) com estes dados antigos e, depois, vou rodar apenas 1x por dia, com a data atual, apenas para inserir o saldo daquele dia.
Cada mês aproximadamete me traz 10.000 linhas, foi super rápido.
Temos cerca de 800 itens por depósito, quando coloco apenas 1 dia, é instantâneo.
Muito grato mesmo pela ajuda.segunda-feira, 9 de dezembro de 2019 18:31 -
Oi Junior,
sim, estou armazenando em outra tabela só os valores.
Eu vou criar dashboards no qliksense com estes dados, para efeito de controle do MRP da área produtiva.
Muito obrigado pela força !segunda-feira, 9 de dezembro de 2019 18:33 -
Oi Junior,
sim, estou armazenando em outra tabela só os valores.
Eu vou criar dashboards no qliksense com estes dados, para efeito de controle do MRP da área produtiva.
Muito obrigado pela força !Mateus,
Ok, qualquer coisa estamos por aqui.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
segunda-feira, 9 de dezembro de 2019 19:59