Consultar dados de string com mais de um Valor separado por /

11/05/2023

0

SQL

Boa Tarde Pessoal,

Tenho uma tabela de código que, este códigos estão todos em uma única linha separado por / FCAD.OPER1_CAMPO

Exemplo: 110/1013/116/1025/

Pergunta:
Como faço para ligar cada informação deste campo com a tabela SE2.E2_NATUREZ sendo que este campo tem apenas um código ? ou seja ele devera ter tipo um for para ler e acumular o resulta ate que seja feito todos os codigo da string

SELECT
SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS VALOR
FROM
SE2010 SE2
INNER JOIN FLUXO_CADFILIAL FCAD ON
FCAD.CODFILIAL = SE2.E2_FILIAL
WHERE
SE2.D_E_L_E_T_ = ' '
AND FCAD.STATUS ='S'
AND FCAD.OPER1_CAMPO ?????

AND SE2.E2_BAIXA BETWEEN '20230501' AND '20230531'
Wanderson Fernandes

Wanderson Fernandes

Responder

Posts

12/05/2023

Emerson Nascimento

tente assim:
SELECT
	SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS VALOR
FROM
	SE2010 SE2
INNER JOIN
	FLUXO_CADFILIAL FCAD
	ON FCAD.D_E_L_E_T_ = ' ' AND FCAD.CODFILIAL = SE2.E2_FILIAL
	AND '/'+LTRIM(RTRIM(FCAD.OPER1_CAMPO))+'/' LIKE '%/'+LTRIM(RTRIM(SE2.E2_NATUREZ))+'/%'
WHERE
	SE2.D_E_L_E_T_ = ' '
	AND FCAD.STATUS ='S'
	AND SE2.E2_BAIXA BETWEEN '20230501' AND '20230531'

concatenei com '/' e utilizei ltrim() e rtrim() para evitar um falso positivo, como por exemplo o código '11' ser encontrado em '110'. como o '11' estaria envolvido por barras ('/11/'), ele não será encontrado em '/110/'.
esta é uma forma ruim de fazer a busca, porque o índice não será utilizado.



Responder

12/05/2023

Wanderson Fernandes

Bom dia Emerson,

Obrigado pela ajuda, funcionou certinho.

tente assim:
SELECT
	SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS VALOR
FROM
	SE2010 SE2
INNER JOIN
	FLUXO_CADFILIAL FCAD
	ON FCAD.D_E_L_E_T_ = ' ' AND FCAD.CODFILIAL = SE2.E2_FILIAL
	AND '/'+LTRIM(RTRIM(FCAD.OPER1_CAMPO))+'/' LIKE '%/'+LTRIM(RTRIM(SE2.E2_NATUREZ))+'/%'
WHERE
	SE2.D_E_L_E_T_ = ' '
	AND FCAD.STATUS ='S'
	AND SE2.E2_BAIXA BETWEEN '20230501' AND '20230531'

concatenei com '/' e utilizei ltrim() e rtrim() para evitar um falso positivo, como por exemplo o código '11' ser encontrado em '110'. como o '11' estaria envolvido por barras ('/11/'), ele não será encontrado em '/110/'.
esta é uma forma ruim de fazer a busca, porque o índice não será utilizado.



Responder

15/05/2023

Arthur Heinrich

Bom dia Emerson,

Obrigado pela ajuda, funcionou certinho.



Wanderson, mas você considerou a parte mais importante da mensagem do Emerson, de que esta é uma forma ruim de fazer isso?

Uma coisa é fazer isso, de forma manual e eventual, para a qual a solução dele é a que funciona. Outra bem diferente é assumir que esta é a solução técnica para a implementação do sistema.

Um único registro não pode ser vinculado diretamente a uma outra tabela, por intermédio de múltiplas chaves no próprio registro, concatenadas da forma como está, em uma única coluna.

O que temos aqui é um relacionamento (n<-->n), que requer uma terceira tabela para o relacionamento das duas anteriores, combinando a tupla que contém a PK das duas tabelas.
Responder

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

Aceitar