Funcao In ou Like

07/04/2022

0

SQL

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
Wanderson Fernandes

Wanderson Fernandes

Responder

Posts

07/04/2022

Emerson Nascimento

tente assim:
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
dependendo da tua versão do SQL Server você opderá utilizar a função STRING_SPLIT
Responder

08/04/2022

Wanderson Fernandes

Boa Tarde Emerson,

Obrigado pelo retorno más, este não deu certo.

tente assim:
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
dependendo da tua versão do SQL Server você opderá utilizar a função STRING_SPLIT
Responder

08/04/2022

Emerson Nascimento

o que quer dizer "não deu certo"?

deu erro?
não apresentou nada?
apresentou dados errados?


Responder

08/04/2022

Wanderson Fernandes

o que quer dizer "não deu certo"?

deu erro?
não apresentou nada?
apresentou dados errados?




Desculpa,

Os dados Vieram errados e os valores repetidos para a mesma filial.
Responder

08/04/2022

Emerson Nascimento

como você sabe que os dados vieram repetidos pra mesma filial se você não apresenta a filial?
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
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


Responder

13/04/2022

Wanderson Fernandes

como você sabe que os dados vieram repetidos pra mesma filial se você não apresenta a filial?
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
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




Bom dia Emerson,

Mais uma vez muito obrigado pelo retorno, vou testar e te posiciono.
Responder

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

Aceitar