Jump to content
Vanderlei Figueiredo Preto

[Resolvido] Count Total utilizando UNION ALL

Recommended Posts

Boa tarde

 

Pessoal,

 

estou fazendo um UNUION ALL e preciso retornar o COUNT total do UNION ALL, segue abaixo o exemplo:

 

SELECT DECODE(TRIM(T02.SISTEMA),
              'TESTE1' , 'TESTE1',
              'TESTE2' , 'TESTE2',
              'TESTE3' , 'TESTE3',
              'TESTE4' , 'TESTE4',
              T02.SISTEMA),
       COUNT(DISTINCT T02.numero)
FROM TABELA T02
WHERE T02.numero IS NOT NULL
      AND T02.DATA IS NOT NULL
      AND TRUNC(T02.DATA) >= TRUNC(SYSDATE - &DIAS)
      AND T02.Id <> 1
GROUP BY (T02.sistema)

      UNION ALL
      
SELECT DECODE(TRIM(T02.SISTEMA),
              'TESTE5','TESTE5',
              T02.SISTEMA),
       COUNT(DISTINCT T02.numero)
FROM TABELA T02
WHERE T02.numero IS NOT NULL
      AND T02.DATA IS NOT NULL
      AND TRUNC(T02.ENVIO) >= TRUNC(SYSDATE - &DIAS)
      AND T02.Id = 5000
GROUP BY(T02.sistema);

 

O resultado esta saindo certo, o que preciso é incluir o count total . Já tentei utilizar o Rollup, porém retorna uma linha para cada SELECT, eu preciso apenas 1 com o total.

Desde já agradeço pela atenção de todos.

 

 

 

 

Share this post


Link to post
Share on other sites

Uma forma simples


 

select sum(tot) tot
from
(
SELECT DECODE(TRIM(T02.SISTEMA),
              'TESTE1' , 'TESTE1',
              'TESTE2' , 'TESTE2',
              'TESTE3' , 'TESTE3',
              'TESTE4' , 'TESTE4',
              T02.SISTEMA),
       COUNT(DISTINCT T02.numero) tot
FROM TABELA T02
WHERE T02.numero IS NOT NULL
      AND T02.DATA IS NOT NULL
      AND TRUNC(T02.DATA) >= TRUNC(SYSDATE - &DIAS)
      AND T02.Id <> 1
GROUP BY (T02.sistema)

      UNION ALL
      
SELECT DECODE(TRIM(T02.SISTEMA),
              'TESTE5','TESTE5',
              T02.SISTEMA),
       COUNT(DISTINCT T02.numero)
FROM TABELA T02
WHERE T02.numero IS NOT NULL
      AND T02.DATA IS NOT NULL
      AND TRUNC(T02.ENVIO) >= TRUNC(SYSDATE - &DIAS)
      AND T02.Id = 5000
GROUP BY(T02.sistema)
) virtual;

 

Share this post


Link to post
Share on other sites
10 minutos atrás, Motta disse:

Uma forma simples


 


select sum(tot) tot
from
(
SELECT DECODE(TRIM(T02.SISTEMA),
              'TESTE1' , 'TESTE1',
              'TESTE2' , 'TESTE2',
              'TESTE3' , 'TESTE3',
              'TESTE4' , 'TESTE4',
              T02.SISTEMA),
       COUNT(DISTINCT T02.numero) tot
FROM TABELA T02
WHERE T02.numero IS NOT NULL
      AND T02.DATA IS NOT NULL
      AND TRUNC(T02.DATA) >= TRUNC(SYSDATE - &DIAS)
      AND T02.Id <> 1
GROUP BY (T02.sistema)

      UNION ALL
      
SELECT DECODE(TRIM(T02.SISTEMA),
              'TESTE5','TESTE5',
              T02.SISTEMA),
       COUNT(DISTINCT T02.numero)
FROM TABELA T02
WHERE T02.numero IS NOT NULL
      AND T02.DATA IS NOT NULL
      AND TRUNC(T02.ENVIO) >= TRUNC(SYSDATE - &DIAS)
      AND T02.Id = 5000
GROUP BY(T02.sistema)
) virtual;

 

Boa tarde

 

Obrigado pelo retorno Motta,

 

Porém dessa forma retorna somente a soma. Eu preciso apresentar os campos

Exemplo da saida

 

SISTEMA   TOT

TESTE1     10

TESTE2     20

TESTE3    30

TESTE4    40

TESTE5    50

                 150

Share this post


Link to post
Share on other sites

tente


 

select campo1,sum(tot) tot
from
(
SELECT DECODE(TRIM(T02.SISTEMA),
              'TESTE1' , 'TESTE1',
              'TESTE2' , 'TESTE2',
              'TESTE3' , 'TESTE3',
              'TESTE4' , 'TESTE4',
              T02.SISTEMA) campo1,
       COUNT(DISTINCT T02.numero) tot
FROM TABELA T02
WHERE T02.numero IS NOT NULL
      AND T02.DATA IS NOT NULL
      AND TRUNC(T02.DATA) >= TRUNC(SYSDATE - &DIAS)
      AND T02.Id <> 1
GROUP BY (T02.sistema)

      UNION ALL
      
SELECT DECODE(TRIM(T02.SISTEMA),
              'TESTE5','TESTE5',
              T02.SISTEMA),
       COUNT(DISTINCT T02.numero)
FROM TABELA T02
WHERE T02.numero IS NOT NULL
      AND T02.DATA IS NOT NULL
      AND TRUNC(T02.ENVIO) >= TRUNC(SYSDATE - &DIAS)
      AND T02.Id = 5000
GROUP BY(T02.sistema)
) virtual
group by campo1;

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By kinect
      Prezados,
       
      Eu tenho a tabela "QUALQUER" abaixo com as seguintes colunas e valores:
       
      coluna A I Coluna B
       
      A F
      F A
      L A
      B A
      C A
      A C
       
       
      O que procuro fazer penso que daria pra ser feito com 3 selects, mas apenas consigo 2 selects.
      Eu quero listar os valores da coluna A com os da coluna B e mostrá-los caso atendam condições específicas: se "A" estiver na coluna "A", liste Coluna B; se "A" estiver na Coluna B, liste coluna A; mostre apenas os valores da coluna A unidos aos valores da coluna B se cada valor distinto aparecer mais do que apenas uma vez. Ou seja, eu quero apresentar apenas os valores "F" e "C".
       
      O mais próximo que consegui (que funciona) foi conforme consulta abaixo (que mostra os valores F, L, B e C)
       
      (SELECT DISTINCT coluna A FROM qualquer WHERE coluna B='A') UNION ALL (SELECT DISTINCT coluna B FROM qualquer WHERE
      coluna A='A')
       
      Tentei fazer com a expressão abaixo, mas sempre retorna erro.
       
      SELECT y FROM ((SELECT DISTINCT coluna A FROM qualquer WHERE coluna B='A') UNION ALL (SELECT DISTINCT coluna B FROM qualquer WHERE coluna A='A')) AS y GROUP BY coluna A HAVING count (*) > 1
       
      Alguém tem uma ideia de como resolver isso? Desde já, agradeço.
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.