Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

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