Funcao In ou Like
Boa tarde Pessoal,
Estou dificuldade em resolver uma consulta que até o momento eu ainda não tinha passado por esta situação.
Tenho um campo ZB1.ZB1_FILATI que possui vários informações separadas por barra conforme o exemplo abaixo.
16/30/40/46/51/52/60/70/72/73
Então preciso fazer com que outra tabela SE2.E2_FILIAL verifique se existe o código dentro da ZB1_FILATI
Segue abaixo a Query
SELECT
ZB1.ZB1_CONTA,
Cast(SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS Numeric(15,2) ) AS VALOR
FROM
ZB1010 ZB1(NOLOCK)
,SE2010 SE2(NOLOCK)
WHERE
1=1
AND ZB1.D_E_L_E_T_=''
AND SE2.D_E_L_E_T_=''
AND ZB1.ZB1_GRUPO='I1'
AND SE2.E2_BAIXA BETWEEN '20220301' AND '20220331'
AND SE2.E2_NATUREZ = ZB1.ZB1_CODNAT
AND SE2.E2_FILIAL IN ZB1.ZB1_FILATI
GROUP BY ZB1.ZB1_CONTA
Estou dificuldade em resolver uma consulta que até o momento eu ainda não tinha passado por esta situação.
Tenho um campo ZB1.ZB1_FILATI que possui vários informações separadas por barra conforme o exemplo abaixo.
16/30/40/46/51/52/60/70/72/73
Então preciso fazer com que outra tabela SE2.E2_FILIAL verifique se existe o código dentro da ZB1_FILATI
Segue abaixo a Query
SELECT
ZB1.ZB1_CONTA,
Cast(SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS Numeric(15,2) ) AS VALOR
FROM
ZB1010 ZB1(NOLOCK)
,SE2010 SE2(NOLOCK)
WHERE
1=1
AND ZB1.D_E_L_E_T_=''
AND SE2.D_E_L_E_T_=''
AND ZB1.ZB1_GRUPO='I1'
AND SE2.E2_BAIXA BETWEEN '20220301' AND '20220331'
AND SE2.E2_NATUREZ = ZB1.ZB1_CODNAT
AND SE2.E2_FILIAL IN ZB1.ZB1_FILATI
GROUP BY ZB1.ZB1_CONTA
Wanderson Fernandes
Curtidas 0
Respostas
Emerson Nascimento
07/04/2022
tente assim:
dependendo da tua versão do SQL Server você opderá utilizar a função STRING_SPLIT
SELECT ZB1.ZB1_CONTA, Cast(SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS Numeric(15,2) ) AS VALOR FROM ZB1010 ZB1(NOLOCK) INNER JOIN SE2010 SE2(NOLOCK) ON SE2.D_E_L_E_T_= '' AND CHARINDEX(SE2.E2_FILIAL, ZB1.ZB1_FILATI) > 0 AND SE2.E2_NATUREZ = ZB1.ZB1_CODNAT WHERE ZB1.D_E_L_E_T_='' AND ZB1.ZB1_GRUPO = 'I1' AND SE2.E2_BAIXA BETWEEN '20220301' AND '20220331' GROUP BY ZB1.ZB1_CONTA
GOSTEI 0
Wanderson Fernandes
07/04/2022
Boa Tarde Emerson,
Obrigado pelo retorno más, este não deu certo.
Obrigado pelo retorno más, este não deu certo.
tente assim:
dependendo da tua versão do SQL Server você opderá utilizar a função STRING_SPLIT
SELECT ZB1.ZB1_CONTA, Cast(SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS Numeric(15,2) ) AS VALOR FROM ZB1010 ZB1(NOLOCK) INNER JOIN SE2010 SE2(NOLOCK) ON SE2.D_E_L_E_T_= '' AND CHARINDEX(SE2.E2_FILIAL, ZB1.ZB1_FILATI) > 0 AND SE2.E2_NATUREZ = ZB1.ZB1_CODNAT WHERE ZB1.D_E_L_E_T_='' AND ZB1.ZB1_GRUPO = 'I1' AND SE2.E2_BAIXA BETWEEN '20220301' AND '20220331' GROUP BY ZB1.ZB1_CONTA
GOSTEI 0
Emerson Nascimento
07/04/2022
o que quer dizer "não deu certo"?
deu erro?
não apresentou nada?
apresentou dados errados?
deu erro?
não apresentou nada?
apresentou dados errados?
GOSTEI 0
Wanderson Fernandes
07/04/2022
o que quer dizer "não deu certo"?
deu erro?
não apresentou nada?
apresentou dados errados?
deu erro?
não apresentou nada?
apresentou dados errados?
Desculpa,
Os dados Vieram errados e os valores repetidos para a mesma filial.
GOSTEI 0
Emerson Nascimento
07/04/2022
como você sabe que os dados vieram repetidos pra mesma filial se você não apresenta a filial?
teste assim:
para que os dados não se repitam você NÃO pode ter a mesma filial em dois registros da ZB1(ZB1_FILATI) com um mesmo ZB1_CODNAT e ZB1_GRUPO
teste assim:
SELECT ZB1.ZB1_CONTA, SE2.E2_FILIAL, Cast(SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS Numeric(15,2) ) AS VALOR FROM ZB1010 ZB1(NOLOCK) INNER JOIN SE2010 SE2(NOLOCK) ON SE2.D_E_L_E_T_= '' AND CHARINDEX(SE2.E2_FILIAL, ZB1.ZB1_FILATI) > 0 AND SE2.E2_NATUREZ = ZB1.ZB1_CODNAT WHERE ZB1.D_E_L_E_T_='' AND ZB1.ZB1_GRUPO = 'I1' AND SE2.E2_BAIXA BETWEEN '20220301' AND '20220331' GROUP BY ZB1.ZB1_CONTA, SE2.E2_FILIAL
GOSTEI 0
Wanderson Fernandes
07/04/2022
como você sabe que os dados vieram repetidos pra mesma filial se você não apresenta a filial?
teste assim:
para que os dados não se repitam você NÃO pode ter a mesma filial em dois registros da ZB1(ZB1_FILATI) com um mesmo ZB1_CODNAT e ZB1_GRUPO
teste assim:
SELECT ZB1.ZB1_CONTA, SE2.E2_FILIAL, Cast(SUM(SE2.E2_VALOR - SE2.E2_SDDECRE + SE2.E2_ACRESC - SE2.E2_DESCONT) AS Numeric(15,2) ) AS VALOR FROM ZB1010 ZB1(NOLOCK) INNER JOIN SE2010 SE2(NOLOCK) ON SE2.D_E_L_E_T_= '' AND CHARINDEX(SE2.E2_FILIAL, ZB1.ZB1_FILATI) > 0 AND SE2.E2_NATUREZ = ZB1.ZB1_CODNAT WHERE ZB1.D_E_L_E_T_='' AND ZB1.ZB1_GRUPO = 'I1' AND SE2.E2_BAIXA BETWEEN '20220301' AND '20220331' GROUP BY ZB1.ZB1_CONTA, SE2.E2_FILIAL
Bom dia Emerson,
Mais uma vez muito obrigado pelo retorno, vou testar e te posiciono.
GOSTEI 0