none
Trazer registro que não existe RRS feed

  • Pergunta

  • Bom dia!

    Estou precisando fazer uma consulta que me traga um registro que não existe.

    Explicar melhor o que estou fazendo ...

    Tenho uma tabela que contém os registros do saldo de minhas contas contábeis e para cada lançamento no meu tipo de conta 1 existe o mesmo lançamento com o mesmo valor no meu tipo de conta 3.

    Acontece que algumas vezes existe esse lançamento no tipo 1 e nao existe no tipo 3.

    Preciso fazer uma consulta que me traga quais são esses registros do tipo 1 que não existe no tipo de conta 3.

    Tentei montar a estrutura da seguinte forma porém não funcionou:

    SELECT     FILIAL, DATA, LOTE, DOC, CT_DEBITO, TP_SALD, CT_CREDITO, SUM(CONVERT(DECIMAL(28, 2), VALOR)) AS SOMA 
                      
    FROM   CT2010 AS C
    WHERE     (DATA >= '20160101') AND (TP_SALD = 1) AND (D_E_L_E_T_ <> '*')  and (C.CT_CREDIT LIKE '3%' OR C.CT_DEBITO LIKE '3%')
    GROUP BY FILIAL, DATA, LOTE, DOC, CT_DEBITO, TP_SALD, CT_CREDIT
    HAVING      (SUM(CONVERT(DECIMAL(28, 2), CT2_VALOR)) <>
                              (SELECT     SUM(CONVERT(DECIMAL(28, 2), VALOR)) AS Expr1
                                FROM          dadosadv10.dbo.CT2010 AS D
                                WHERE      (TP_SALD = 3) AND (D_E_L_E_T_ <> '*') AND (DATA = C.DATA) AND (FILIAL = C.FILIAL) AND (LOTE = C.LOTE) 
    AND                                                    (DOC = C.DOC) AND (CT_DEBITO = C.CT_DEBITO) AND (CT_CREDIT = C.CT_CREDIT)))

    Alguem poderia me ajudar com essa estrutura?
    Preciso trazer registros do tipo conta = 1 que ao ser somado nao existe ou não bate com o valor da soma do tipo conta 3

    segunda-feira, 24 de outubro de 2016 12:45

Respostas

  • Bom dia,

    Carine, acredito que com a consulta abaixo seja possível obter também eventuais casos onde exista o tipo 3 e não exista o tipo 1, além dos casos que você citou:

    SELECT
        FILIAL, 
        DATA, 
        LOTE, 
        DOC, 
        CT_DEBITO, 
        CT_CREDITO, 
        SUM(case when TP_SALD = 1 then CONVERT(DECIMAL(28, 2), VALOR) else 0 end) AS SomaTipo1,
        SUM(case when TP_SALD = 3 then CONVERT(DECIMAL(28, 2), VALOR) else 0 end) AS SomaTipo3
    FROM CT2010 AS C
    WHERE
        (DATA >= '20160101') AND 
        (D_E_L_E_T_ <> '*') and 
        (C.CT_CREDIT LIKE '3%' OR C.CT_DEBITO LIKE '3%')
    GROUP BY 
        FILIAL, 
        DATA, 
        LOTE, 
        DOC, 
        CT_DEBITO, 
        CT_CREDIT
    HAVING
        SUM(case when TP_SALD = 1 then CONVERT(DECIMAL(28, 2), VALOR) else 0 end) <>
        SUM(case when TP_SALD = 3 then CONVERT(DECIMAL(28, 2), VALOR) else 0 end)

     Caso você queira retornar somente os casos onde existe o tipo 1 e não existe o tipo 3 experimente adicionar o trecho abaixo no Having da consulta acima:

    AND MIN(TP_SALD) = 1

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta carine.couto segunda-feira, 24 de outubro de 2016 13:41
    segunda-feira, 24 de outubro de 2016 13:12

Todas as Respostas

  • Bom dia,

    Carine, acredito que com a consulta abaixo seja possível obter também eventuais casos onde exista o tipo 3 e não exista o tipo 1, além dos casos que você citou:

    SELECT
        FILIAL, 
        DATA, 
        LOTE, 
        DOC, 
        CT_DEBITO, 
        CT_CREDITO, 
        SUM(case when TP_SALD = 1 then CONVERT(DECIMAL(28, 2), VALOR) else 0 end) AS SomaTipo1,
        SUM(case when TP_SALD = 3 then CONVERT(DECIMAL(28, 2), VALOR) else 0 end) AS SomaTipo3
    FROM CT2010 AS C
    WHERE
        (DATA >= '20160101') AND 
        (D_E_L_E_T_ <> '*') and 
        (C.CT_CREDIT LIKE '3%' OR C.CT_DEBITO LIKE '3%')
    GROUP BY 
        FILIAL, 
        DATA, 
        LOTE, 
        DOC, 
        CT_DEBITO, 
        CT_CREDIT
    HAVING
        SUM(case when TP_SALD = 1 then CONVERT(DECIMAL(28, 2), VALOR) else 0 end) <>
        SUM(case when TP_SALD = 3 then CONVERT(DECIMAL(28, 2), VALOR) else 0 end)

     Caso você queira retornar somente os casos onde existe o tipo 1 e não existe o tipo 3 experimente adicionar o trecho abaixo no Having da consulta acima:

    AND MIN(TP_SALD) = 1

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta carine.couto segunda-feira, 24 de outubro de 2016 13:41
    segunda-feira, 24 de outubro de 2016 13:12
  •  

    uma das possíveis soluções  seria dividir para conquistar

    1) criar um select ou uma tabela temporária com  o tipo 1

    2)criar um select ou uma tabela temporária com  o tipo 3

    fazer a query final ou com um NOT Exists ou com um Except


    Wesley Neves

    segunda-feira, 24 de outubro de 2016 13:23
  • Muito obrigada pela ajuda!

    rs...

    Bem mais simples assim

    hahahah

    segunda-feira, 24 de outubro de 2016 13:41