Consultar dados de string com mais de um Valor separado por /
11/05/2023
0
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
Posts
12/05/2023
Emerson Nascimento
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.
12/05/2023
Wanderson Fernandes
Obrigado pela ajuda, funcionou certinho.
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.
15/05/2023
Arthur Heinrich
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.
Clique aqui para fazer login e interagir na Comunidade :)