Campos com varias informações tendo que passar cada informação para uma linha diferente

24/01/2022

0

Bom dia Pessoal

Tenho um campo na tabela ZZ4 onde é informado mais de um registro como numero de notas ficais como no exemplo abaixo
UNT000148915 / UNT000148917 / UNT000148934 / 1 000299299 / 1 000299300 / 1 000299328

eu preciso que cada nota fiscal desta sejam mostrada em uma linha no sql, como posso fazer isso?

Consulta

SELECT
ZZ4_FILIAL,
ZZ4_DOCS,SUBSTRING(ZZ4_DOCS,1,3),SUBSTRING(ZZ4_DOCS,4,9),ZZ4_FORN,ZZ4_LOJA
FROM ZZ4010 WHERE ZZ4_FILIAL=''72'' AND ZZ4_DOCS LIKE(''%UNT000252535%'') AND D_E_L_E_T_=''''
Wanderson Fernandes

Wanderson Fernandes

Responder

Posts

26/01/2022

Emerson Nascimento

tente com o script abaixo.
DECLARE @FILIAL VARCHAR(2)
DECLARE @FORNECEDOR VARCHAR(6)
DECLARE @LOJA VARCHAR(2)
DECLARE @DOCS VARCHAR(255)
DECLARE @DOC VARCHAR(12)
DECLARE @POSBARRA INT
DECLARE @TABTMP TABLE(FILIAL VARCHAR(2), NOTAFISCAL VARCHAR(12), FORNECEDOR VARCHAR(6), LOJA VARCHAR(2))

DECLARE CURSORTESTE CURSOR LOCAL FOR
SELECT
	ZZ4_FILIAL,
	ZZ4_DOCS,
	ZZ4_FORN, ZZ4_LOJA
FROM
	ZZ4010
WHERE
	D_E_L_E_T_='' AND ZZ4_FILIAL='72' -- SE STORED PROCEDURE, PODE SER UM PARÂMETRO
	AND ZZ4_DOCS LIKE '%UNT000252535%' -- SE STORED PROCEDURE, PODE SER UM PARÂMETRO

OPEN CURSORTESTE

SET NOCOUNT ON

FETCH NEXT FROM CURSORTESTE
INTO @FILIAL, @DOCS, @FORNECEDOR, @LOJA

WHILE (@@FETCH_STATUS = 0)
BEGIN
	SET @POSBARRA = CHARINDEX('/', @DOCS)

	WHILE (@POSBARRA > 0)
	BEGIN
		SET @DOC = SUBSTRING(@DOCS, 1, @POSBARRA-1)
		SET @DOCS = SUBSTRING(@DOCS, @POSBARRA+1, LEN(@DOCS))
		INSERT INTO @TABTMP VALUES (@FILIAL, @DOC, @FORNECEDOR, @LOJA) -- AQUI É @DOC (SINGULAR)
		SET @POSBARRA = CHARINDEX('/', @DOCS)
	END
	INSERT INTO @TABTMP VALUES (@FILIAL, @DOCS, @FORNECEDOR, @LOJA) -- AQUI É @DOCS (PLURAL)

	FETCH NEXT FROM CURSORTESTE
	INTO @FILIAL, @DOCS, @FORNECEDOR, @LOJA

END

CLOSE CURSORTESTE 
DEALLOCATE CURSORTESTE

SET NOCOUNT OFF
SELECT * FROM @TABTMP

você pode criar uma stored procedure com o script acima.
Responder

28/02/2022

Wanderson Fernandes

tente com o script abaixo.
DECLARE @FILIAL VARCHAR(2)
DECLARE @FORNECEDOR VARCHAR(6)
DECLARE @LOJA VARCHAR(2)
DECLARE @DOCS VARCHAR(255)
DECLARE @DOC VARCHAR(12)
DECLARE @POSBARRA INT
DECLARE @TABTMP TABLE(FILIAL VARCHAR(2), NOTAFISCAL VARCHAR(12), FORNECEDOR VARCHAR(6), LOJA VARCHAR(2))

DECLARE CURSORTESTE CURSOR LOCAL FOR
SELECT
	ZZ4_FILIAL,
	ZZ4_DOCS,
	ZZ4_FORN, ZZ4_LOJA
FROM
	ZZ4010
WHERE
	D_E_L_E_T_='' AND ZZ4_FILIAL='72' -- SE STORED PROCEDURE, PODE SER UM PARÂMETRO
	AND ZZ4_DOCS LIKE '%UNT000252535%' -- SE STORED PROCEDURE, PODE SER UM PARÂMETRO

OPEN CURSORTESTE

SET NOCOUNT ON

FETCH NEXT FROM CURSORTESTE
INTO @FILIAL, @DOCS, @FORNECEDOR, @LOJA

WHILE (@@FETCH_STATUS = 0)
BEGIN
	SET @POSBARRA = CHARINDEX('/', @DOCS)

	WHILE (@POSBARRA > 0)
	BEGIN
		SET @DOC = SUBSTRING(@DOCS, 1, @POSBARRA-1)
		SET @DOCS = SUBSTRING(@DOCS, @POSBARRA+1, LEN(@DOCS))
		INSERT INTO @TABTMP VALUES (@FILIAL, @DOC, @FORNECEDOR, @LOJA) -- AQUI É @DOC (SINGULAR)
		SET @POSBARRA = CHARINDEX('/', @DOCS)
	END
	INSERT INTO @TABTMP VALUES (@FILIAL, @DOCS, @FORNECEDOR, @LOJA) -- AQUI É @DOCS (PLURAL)

	FETCH NEXT FROM CURSORTESTE
	INTO @FILIAL, @DOCS, @FORNECEDOR, @LOJA

END

CLOSE CURSORTESTE 
DEALLOCATE CURSORTESTE

SET NOCOUNT OFF
SELECT * FROM @TABTMP

você pode criar uma stored procedure com o script acima.


Bom dia Emerson,

Deu certo muito obrigado pela ajuda.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar