Olá, bom dia.
Sou novo aqui no Clube do Hardware e estou com um problema de consulta no Oracle.
Tentei diversas formas com inner join, porém não tive sucesso.
Seguinte, existe a tabela "Tabela1". Preciso separar em um select a sequencia dela em duas colunas.
Tem casos que terá o número impar de sequencias e tem caso que terá o numero par.
Exemplo_1 (impar): Sequencia 1,2,3,4 e 5 (total 5rows)
Como preciso que seja apresentado:
Coluna_1 Coluna_2
1 4
2 5
3
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Exemplo_2 (par): Sequencia 10,11,12,13:
Coluna_1 Coluna_2
10 12
11 13
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Exemplo_2 consegui fazer funcionar certinho, conforme select abaixo... porém quando é impar não serve, pois acaba gerando um novo valor para coluna B.
_ _ _ _
SELECT a.nr_sequencia, b.nr_sequencia
FROM (SELECT nr_sequencia FROM cm_conjunto_cont WHERE Mod(nr_sequencia,2) = 1) a
INNER JOIN
(SELECT nr_sequencia FROM cm_conjunto_cont WHERE Mod(nr_sequencia,2) = 0 ) b
ON a.nr_sequencia+1 = b.nr_sequencia
WHERE a.nr_sequencia IN (256243,256244,256245,256246)
_ _ _ _
Alguém consegue dar um help?
Obrigado !
Consulta em duas colunas - Oracle
-
- Rank: Estagiário Júnior
- Mensagens: 1
- Registrado em: Seg, 06 Jul 2015 9:50 am
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Bem, entendi sua necessidade, porém deu uma requintada para atender mais genericamente.
Do jeito que realizei a sequencia ordenada pode ter "furos" de valores. Pode ser (10,11,15,16,17). que ainda vai ordenar por coluna até a metade dos valores e a outra metade na outra coluna.
A primeira consulta é apenas para gerar a sequência e ordenar, onde será substituída apenas pela tabela necessitada.
Do jeito que realizei a sequencia ordenada pode ter "furos" de valores. Pode ser (10,11,15,16,17). que ainda vai ordenar por coluna até a metade dos valores e a outra metade na outra coluna.
A primeira consulta é apenas para gerar a sequência e ordenar, onde será substituída apenas pela tabela necessitada.
/* EXEMPLO DE DADOS */
WITH seq as(
SELECT x.valor
, rownum linha
, COUNT(1) OVER() TOTAL
FROM (SELECT NUM_INI + LEVEL - 1 VALOR
FROM (SELECT &val_ini NUM_INI FROM dual)
CONNECT BY LEVEL <= &val_fim - &val_ini + 1) x
order by 1
),
/* Trata valores para ajudar entendimento */
trata as (
select s.valor
, s.linha
, s.total
, CEIL(s.total/2) MEIO
, Mod(linha -1 ,CEIL(s.total/2)) lin
, CEIL(linha/ (CEIL(s.total/2))) coluna
from seq s)
/* Consulta final*/
select t1.valor , t2.valor
from trata t1
left join trata t2 on (t1.lin = t2.lin
AND t1.coluna = t2.coluna -1)
where t1.linha <= t1.meio
;
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 22 visitantes