REFERENCIA CRUZADA NO ORACLE 10.2

Oracle

29/05/2013

Bom dia Colegas!

Eu tenho a seguinte consulta:

select rownum seq, bti_dtdbatidadata data,
                    btc_cdicontratado id,
                    to_CHAR(BTI_HRDBATIDAHORAMINUTO, 'HH24:MI') BATIDA
               from apd.conbatidasreaisclassifs
               left join apd.conbatidasreaisclassifsits on BTI_CDICONBATIDAREALCLASSIF =
                                                           BTC_CDICONBATIDAREALCLASSIF
              WHERE bti_dtdbatidadata BETWEEN '&data_inicial' AND '&data_final'
                and btc_cdicontratado = 134013


Este código me retorna os seguintes dados:

SEQ DATA ID BATIDA
1 27/05/13 134013 10:59
2 27/05/13 134013 13:42
3 27/05/13 134013 15:11
4 27/05/13 134013 20:05

Eu queria que os dados viessem desta forma:

DATA ID b1 b2 b3 b4
27/05/13 134013 10:59 13:42 15:11 20:05

Minha versão do Banco é a 10.2.
Grato pela atenção.

Luiz Manoel
Luiz Manoel

Luiz Manoel

Curtidas 0

Respostas

Carlos Tangerino

Carlos Tangerino

29/05/2013

Luiz, o que mais se aproxima do que você precisa é o código abaixo:

DECLARE
CURSOR c1 IS
-- Cursor com GROUP BY para agrupar aquilo se repete em apenas uma linha
SELECT sequencia,
DATA,
COUNT(batida)
FROM tabela
GROUP BY sequencia,
DATA;
--
-- Cursor para a partir dos campos comuns selecionados no Cursor C1, selecionar aquilo que não é comum
CURSOR c2
(
psequencia VARCHAR2,
pdata DATE
) IS
SELECT batida
FROM tabela
WHERE sequencia = psequencia
AND DATA = pdata;
--
vsequencia VARCHAR2(50);
vdata DATE;
vbatida VARCHAR2(32000);
--
BEGIN
FOR r1 IN c1
LOOP
vsequencia := r1.sequencia;
vdata := r1.data;
FOR r2 IN c2(r1.sequencia, r1.data)
LOOP
IF vbatida IS NULL THEN
vbatida := r2.vbatida;
ELSE
vbatida := vbatida || ' ' || r2.vbatida;
END IF;
END LOOP;
END LOOP;
--
dbms_output.put_line(vsequencia || ' ' || to_char(vdata, 'dd/mm/rrrr') || ' ' || vbatida);
--
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('WHEN OTHERS: '||SQLERRM);
END;

Tem uma função chamada PIVOT mas é para o 11g, mesmo assim, acredito que para o seu caso, que não tem soma, não sei se dará muito certo.
Espero ter colaborado ou deixado alguma pista pra uma solução mais breve.

Abraço,
GOSTEI 0
POSTAR