SELECT COM DATAS DIFERENTES

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Avatar do usuário
vitellozzi
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 50
Registrado em: Qua, 15 Set 2010 9:53 am
Localização: Itatiba

Olá Pessoal, Bom Dia.

A minha dúvida é a seguinte :

TENHO 3 CAMPOS ( COD, NOME e DATA ) como gerar um SELECT onde o COD for igual e a DATA diferente gerar na mesma linha.

COD - NOME - DATA
01 - DANIEL - 01/01/2011
02 - JESSICA - 01/01/2011
01 - DANIEL - 01/02/2011
01 ...
01 ...
03 ...

SELECT : 01 - DANIEL - 01/01/2011 - 01/02/2011 ... caso houver mais ...

Desde já agradeço
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

uma solução seria fazer o uso de function, recebendo o parametro COD como entrada e então return um varchar2 cmo a string pronta....
com as datas concatenadas
ederphil
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Qua, 15 Out 2008 4:05 pm
Localização: taquara-RS

cara,

se precisa ser no sql, testa ai! altera o nome para sua tabela

Selecionar tudo


  SELECT COD,
       NOME,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(DATA,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS datas
FROM   (SELECT COD,
               DATA,
               nome,
               ROW_NUMBER() OVER (PARTITION BY COD ORDER BY DATA) AS curr,
               ROW_NUMBER() OVER (PARTITION BY COD ORDER BY DATA) -1 AS prev
        FROM   TESTE)
GROUP BY COD, NOME
CONNECT BY prev = PRIOR curr AND COD = PRIOR COD
START WITH curr = 1;
se for o 11g já tem pronto >>> LISTAGG
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Bacana demais essa função... Pena que só tem no 11g!! :)
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP
Eduardo Gomes

tem este código também:

Selecionar tudo

select org,
       substr(max(replace(sys_connect_by_path(empresa, '|'),
                          '|',
                          ';' || chr(10) /*delimitador*/)) /*max para agrupar*/,
              3 /*length do delimitador +1*/) string_concatenada /*substr para eliminar o delimitador no início do registro*/
  from (select a.*,
               row_number() over(partition by a.org order by a.org, a.empresa) row#
          from (select o.nome org,
                       e.id_empresa || ' - ' || e.razao_social empresa
                  from bas_t_organizacoes o, bas_t_empresas e
                 where o.id_organizacao = e.id_organizacao) a)
 start with row# = 1
connect by prior org = org
       and prior row# = row# - 1
 group by org
 order by org;
talvez ajude....

abraços
Avatar do usuário
vitellozzi
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 50
Registrado em: Qua, 15 Set 2010 9:53 am
Localização: Itatiba

Olá Pessoal,

Maravilha ... resolveu a primeira dica para mim !!!

Olha outra dica simples também que encontrei :

http://www.dbasupport.com/forums/showthread.php?t=57897

Obrigado a todos pela ajuda !!!
Responder
  • Informação
  • Quem está online

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