Jump to content

Como unir 2 querys distintas no SQL?


Postagens Recomendadas

Olá, pessoal!

Preciso unir essas duas queries em uma só no SQL, mas não estou conseguindo. Será que vocês poderiam me ajudar, por favor?

Query 1

SELECT DISTINCT CCONTA.CODCONTA,(

SELECT SUM (VALOR)FROM (
SELECT  DISTINCT CODCONTA,
ISNULL((SELECT  SUM(CSDANT.VALOR) FROM CSDANT,CCONTA
    WHERE CSDANT.CODCONTA=CCONTA.CODCONTA 
    AND CSDANT.CODCOLCONTA=CCONTA.CODCOLIGADA 
    AND CSDANT.CODCONTA IN(SELECT DISTINCT CREDITO FROM CLANCA WHERE  
                CLANCA.DATA >=:DATA_INI AND CLANCA.DATA <=:DATA_FIM 
                UNION  
                    SELECT DISTINCT DEBITO FROM CLANCA WHERE  
                CLANCA.DATA >=:DATA_INI AND CLANCA.DATA <=:DATA_FIM)
    AND CCONTA.CODCONTA=CTA2.CODCONTA    
    AND CSDANT.CODCOLCONTA=CTA2.CODCOLIGADA ),0)
+
ISNULL((SELECT SUM(VALOR) FROM CLANCA,CCONTA 
    WHERE CLANCA.DEBITO=CCONTA.CODCONTA 
    AND CLANCA.CODCOLDEBITO=CCONTA.CODCOLIGADA 
    AND CCONTA.CODCONTA=CTA2.CODCONTA
    AND CLANCA.DATA <:DATA_INI
    AND CLANCA.CODCOLDEBITO=CTA2.CODCOLIGADA),0) 

-

ISNULL((SELECT SUM(VALOR) FROM CLANCA,CCONTA 
    WHERE CLANCA.CREDITO=CCONTA.CODCONTA 
    AND CLANCA.CODCOLCREDITO=CCONTA.CODCOLIGADA 
    AND CCONTA.CODCONTA=CTA2.CODCONTA
    AND CLANCA.DATA <:DATA_INI
    AND CLANCA.CODCOLCREDITO=CTA2.CODCOLIGADA),0)VALOR 

FROM CCONTA CTA2
WHERE 
CTA2.CODCONTA LIKE CCONTA.CODCONTA+'%'
AND (CTA2.CODCOLIGADA=:P_CODCOLIGADA OR CTA2.CODCOLIGADA = 0) 
AND CODCONTA IN(SELECT DISTINCT CREDITO FROM CLANCA WHERE  
        CLANCA.DATA >=:DATA_INI AND CLANCA.DATA <=:DATA_FIM 
        UNION  
            SELECT DISTINCT DEBITO FROM CLANCA WHERE  
        CLANCA.DATA >=:DATA_INI AND CLANCA.DATA <=:DATA_FIM)

)x
)

FROM CCONTA
WHERE CODCONTA=:P_CODCONTA

 

Query2

SELECT  C2.CODCOLIGADA,C2.CODCONTA,C2.DESCRICAO,
(select SUM(CLANCA.VALOR)
    from CCONTA (NOLOCK),CLANCA
    where
    CLANCA.CODCOLDEBITO=CCONTA.CODCOLIGADA
    AND CLANCA.DEBITO=CCONTA.CODCONTA
    AND (CCONTA.CODCOLIGADA=:P_CODCOLIGADA OR CCONTA.CODCOLIGADA = 0) 
    AND CLANCA.DATA >=:DATA_INI
    AND CLANCA.DATA <=:DATA_FIM
    AND CCONTA.CODCONTA LIKE C2.CODCONTA+'%')DEBITO,

(select SUM(CLANCA.VALOR)
    from CCONTA (NOLOCK),CLANCA
    where
    CLANCA.CODCOLCREDITO=CCONTA.CODCOLIGADA
    AND CLANCA.CREDITO=CCONTA.CODCONTA
    AND (CCONTA.CODCOLIGADA=:P_CODCOLIGADA OR CCONTA.CODCOLIGADA = 0) 
    AND CLANCA.DATA >=:DATA_INI
    AND CLANCA.DATA <=:DATA_FIM
    AND CCONTA.CODCONTA LIKE C2.CODCONTA+'%')CREDITO,
    
(select SUM(CLANCA.VALOR)
    from CCONTA (NOLOCK),CLANCA
    where
    CLANCA.CODCOLDEBITO=CCONTA.CODCOLIGADA
    AND CLANCA.DEBITO=CCONTA.CODCONTA
    AND (CCONTA.CODCOLIGADA=:P_CODCOLIGADA OR CCONTA.CODCOLIGADA = 0) 
    AND CLANCA.DATA >=:DATA_INI
    AND CLANCA.DATA <=:DATA_FIM
    AND CCONTA.CODCONTA LIKE C2.CODCONTA+'%')
-
(select SUM(CLANCA.VALOR)
    from CCONTA (NOLOCK),CLANCA
    where
    CLANCA.CODCOLCREDITO=CCONTA.CODCOLIGADA
    AND CLANCA.CREDITO=CCONTA.CODCONTA
    AND (CCONTA.CODCOLIGADA=:P_CODCOLIGADA OR CCONTA.CODCOLIGADA = 0) 
    AND CLANCA.DATA >=:DATA_INI
    AND CLANCA.DATA <=:DATA_FIM
    AND CCONTA.CODCONTA LIKE C2.CODCONTA+'%')
MOVIMENTACAO /*CALCULA MOVIMENTACAO*/

FROM CCONTA C2
WHERE 
((select SUM(CLANCA.VALOR)
    from CCONTA (NOLOCK),CLANCA
    where
    CLANCA.CODCOLDEBITO=CCONTA.CODCOLIGADA
    AND CLANCA.DEBITO=CCONTA.CODCONTA
    AND (CCONTA.CODCOLIGADA=:P_CODCOLIGADA OR CCONTA.CODCOLIGADA =0) 
    AND CLANCA.DATA >=:DATA_INI
    AND CLANCA.DATA <=:DATA_FIM
    AND CCONTA.CODCONTA LIKE C2.CODCONTA+'%')IS NOT NULL 
OR 
(select SUM(CLANCA.VALOR)
    from CCONTA (NOLOCK),CLANCA
    where
    CLANCA.CODCOLCREDITO=CCONTA.CODCOLIGADA
    AND CLANCA.CREDITO=CCONTA.CODCONTA
    AND (CCONTA.CODCOLIGADA=:P_CODCOLIGADA OR CCONTA.CODCOLIGADA = 0) 
    AND CLANCA.DATA >=:DATA_INI
    AND CLANCA.DATA <=:DATA_FIM
    AND CCONTA.CODCONTA LIKE C2.CODCONTA+'%')IS NOT NULL )
AND (C2.CODCOLIGADA=:P_CODCOLIGADA OR C2.CODCOLIGADA = 0) 

ORDER BY CODCONTA

Será que vocês poderiam me ajudar a unir essas duas queries em uma só?

Muito obrigado!

  • Curtir 1
Link to comment
Compartilhe em outros sites

tente usar um with para calcular e encapsular a movimentação das contas para que assim facilitar a utilização e leitura

algo assim deve funcionar mas dependendo do SGBD utilizado pode necessitar ajustes

 

WITH Movimentacao AS (
    SELECT 
        C2.CODCOLIGADA,
        C2.CODCONTA,
        C2.DESCRICAO,
        DEBITO = (
            SELECT SUM(CLANCA.VALOR)
            FROM CLANCA
            WHERE
                CLANCA.CODCOLDEBITO = C2.CODCOLIGADA
                AND CLANCA.DEBITO = C2.CODCONTA
                AND CLANCA.DATA >= :DATA_INI
                AND CLANCA.DATA <= :DATA_FIM
        ),
        CREDITO = (
            SELECT SUM(CLANCA.VALOR)
            FROM CLANCA
            WHERE
                CLANCA.CODCOLCREDITO = C2.CODCOLIGADA
                AND CLANCA.CREDITO = C2.CODCONTA
                AND CLANCA.DATA >= :DATA_INI
                AND CLANCA.DATA <= :DATA_FIM
        ),
        MOVIMENTACAO = (
            SELECT SUM(CLANCA.VALOR)
            FROM CLANCA
            WHERE
                CLANCA.CODCOLDEBITO = C2.CODCOLIGADA
                AND CLANCA.DEBITO = C2.CODCONTA
                AND CLANCA.DATA >= :DATA_INI
                AND CLANCA.DATA <= :DATA_FIM
        ) - (
            SELECT SUM(CLANCA.VALOR)
            FROM CLANCA
            WHERE
                CLANCA.CODCOLCREDITO = C2.CODCOLIGADA
                AND CLANCA.CREDITO = C2.CODCONTA
                AND CLANCA.DATA >= :DATA_INI
                AND CLANCA.DATA <= :DATA_FIM
        )
    FROM CCONTA C2
    WHERE
        EXISTS (
            SELECT 1
            FROM CLANCA
            WHERE
                (CLANCA.CODCOLDEBITO = C2.CODCOLIGADA AND CLANCA.DEBITO = C2.CODCONTA)
                OR (CLANCA.CODCOLCREDITO = C2.CODCOLIGADA AND CLANCA.CREDITO = C2.CODCONTA)
        )
        AND (C2.CODCOLIGADA = :P_CODCOLIGADA OR C2.CODCOLIGADA = 0)
)

SELECT DISTINCT
    CCONTA.CODCONTA,
    (
        SELECT SUM(VALOR)
        FROM (
            SELECT DISTINCT CODCONTA,
                ISNULL((
                    SELECT SUM(CSDANT.VALOR)
                    FROM CSDANT
                    WHERE 
                        CSDANT.CODCONTA = CCONTA.CODCONTA
                        AND CSDANT.CODCOLCONTA = CCONTA.CODCOLIGADA
                        AND CSDANT.CODCONTA IN (
                            SELECT DISTINCT CREDITO FROM CLANCA WHERE CLANCA.DATA >= :DATA_INI AND CLANCA.DATA <= :DATA_FIM
                            UNION
                            SELECT DISTINCT DEBITO FROM CLANCA WHERE CLANCA.DATA >= :DATA_INI AND CLANCA.DATA <= :DATA_FIM
                        )
                ), 0)
                + ISNULL((
                    SELECT SUM(VALOR)
                    FROM CLANCA
                    WHERE 
                        CLANCA.DEBITO = CCONTA.CODCONTA
                        AND CLANCA.CODCOLDEBITO = CCONTA.CODCOLIGADA
                        AND CLANCA.DATA < :DATA_INI
                ), 0)
                - ISNULL((
                    SELECT SUM(VALOR)
                    FROM CLANCA
                    WHERE 
                        CLANCA.CREDITO = CCONTA.CODCONTA
                        AND CLANCA.CODCOLCREDITO = CCONTA.CODCOLIGADA
                        AND CLANCA.DATA < :DATA_INI
                ), 0) AS VALOR
            FROM CCONTA CTA2
            WHERE 
                CTA2.CODCONTA LIKE CCONTA.CODCONTA + '%'
                AND (CTA2.CODCOLIGADA = :P_CODCOLIGADA OR CTA2.CODCOLIGADA = 0)
        ) x
    ) AS SOMA_VALOR
FROM CCONTA
WHERE CODCONTA = :P_CODCONTA
ORDER BY CCONTA.CODCONTA;
 

  • Ajudou! 1
Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...