SELECT com função de GRUPO

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Jedi
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Ter, 06 Jul 2004 7:42 pm
Localização: São Paulo
Jedi

Galera, boa tarde preciso fazer um select que me traga a seguinte tabela.
Nesta consulta, forneco uma data especifica para dt_criacao. Então TOT_DIA será o numero de contas criadas em dt_criacao, TOT_mês será o número de contas criada dentro do mês de dt_criacao e consequentemente TOT_ANO será o número de contas criadas dentro do ano que é fornecido em dt_criacao, ou seja :
dt_criacao = 20051206, logo mês =12 e ano = 2005

Selecionar tudo

PRODUTO      TOT_DIA        TOT_mês       TOT_ANO
   4           125            500           1200
   5             0            300            950
   6            50             50             50

Para isto utilizo uma única tabela chamada CONTAS com os campos dt_criacao e produto.

Para o TOT_DIA consigo fazer o select , mas para trazer os TOT_mês e TOT_ANO, respectivamente por produto não estou conseguindo fazer. alguém poderia me dar um help ?!!

Para trazer as duas primeras colunas o select fica :

Selecionar tudo

select produto, count(dt_criacao)
from contas
where dt_criacao = "20051206"
group by produto 

Alguém poderia me dar um help ?!!

Até mais e obrigado !!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Fiz um exemplo com SCOTT. Dá uma olhada:

Selecionar tudo

SQL> select deptno, hiredate
  2  from emp
  3  where to_char(hiredate, 'yyyy') = 1981
  4  order by 1,2
  5  /

    DEPTNO HIREDATE
---------- ---------
        10 09-JUN-81
        10 17-NOV-81
        20 02-APR-81
        20 03-DEC-81
        30 20-FEB-81
        30 22-FEB-81
        30 01-MAY-81
        30 08-SEP-81
        30 28-SEP-81
        30 03-DEC-81

10 rows selected.
Agora, vamos somar do jeito que você precisa:

Selecionar tudo

SQL> select a.dep, b.qtd_dia, c.qtd_mês, d.qtd_ano
  2  from 
  3    (select distinct deptno dep
  4     from emp 
  5    ) a
  6  , (select deptno, count(1) qtd_dia 
  7     from emp 
  8     where to_char(hiredate,'dd/mm/yyyy')  = '20/02/1981' group by deptno)   b
  9  , (select deptno, count(1) qtd_mês 
 10     from emp 
 11     where to_char(hiredate,'mm/yyyy')     = '02/1981'    group by deptno)   c
 12  , (select deptno, count(1) qtd_ano 
 13     from emp 
 14     where to_char(hiredate,'yyyy')        = '1981'       group by deptno)   d
 15  where a.dep=b.deptno(+) 
 16    and a.dep=c.deptno(+) 
 17    and a.dep=d.deptno(+) 
 18  /

       DEP    QTD_DIA    QTD_mês    QTD_ANO
---------- ---------- ---------- ----------
        10                                2
        20                                2
        30          1          2          6

SQL> 
:-o
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes