Ir para conteúdo

POWERED BY:

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.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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;

 

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por 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.
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.