Página 1 de 1
Select que retorne Registros em colunas
Enviado: Qui, 23 Mar 2006 11:44 am
por celsobtu
Olá pessoal !
Estou com um probleminha básico ...rs...gostaria da ajuda de vocês.
Tenho uma tabela produtos e uma tabela operacoes.
a tabela produtos contém o cadastro dos produtos
a tabela operacoes contem as fases que este produto para para ser fabricado.
No meu select é retornado conforme abaixo:
Selecionar tudo
Cod | Produto | Operacao | Tempo
1 | Acerola | Moer | 20
1 | Acerola | Filtrar | 18
1 | Acerola | Concentrar | 17
Preciso que me retorne da seguinte maneira
Selecionar tudo
Cod | Produto | Operacao1 | Tempo1 | Operacao2 | Tempo2 | ...
1 | Acerola | Moer | 20 | Filtrar | 18 | ...
Isto é, o registro (linha) deve ser retornado como coluna.
Agradeço a atenção.
CelsoBtu
Enviado: Qui, 23 Mar 2006 12:19 pm
por dr_gori
Aí vai um exemplo de CROSSTAB:
Selecionar tudo
SQL> select * from emp order by hiredate;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7839 KING PRESIDENT 17-NOV-81 5000 10
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
14 rows selected.
SQL>
SQL> select
2 -- to_char(hiredate, 'yyyy/mm')
3 deptno
4 , sum(decode(to_char(hiredate, 'mm'), '12' ,sal ) ) a1980_12
5 , sum(decode(to_char(hiredate, 'mm'), '01' ,sal ) ) a1981_01
6 , sum(decode(to_char(hiredate, 'mm'), '02' ,sal ) ) a1981_02
7 , sum(decode(to_char(hiredate, 'mm'), '04' ,sal ) ) a1981_04
8 , sum(decode(to_char(hiredate, 'mm'), '05' ,sal ) ) a1981_05
9 , sum(decode(to_char(hiredate, 'mm'), '06' ,sal ) ) a1981_06
10 from emp
11 group by
12 deptno
13 order by 1
14 /
DEPTNO A1980_12 A1981_01 A1981_02 A1981_04 A1981_05 A1981_06
---------- ---------- ---------- ---------- ---------- ---------- ----------
10 1300 2450
20 3800 5975 1100
30 950 2850 2850
SQL>
No seu caso, é possivel fazer isso, mas tem um número de colunas máxima. Tipo, você pode preparar seu SQL para que venham 5 colunas. (ou 10 se for o caso). Mas isso é fixo!
Qualquer dúvida, dá um toque.
OK ...deu certo ...rs
Enviado: Sex, 24 Mar 2006 3:27 pm
por celsobtu
Valeu amigão !!! Obrigado pela dica. funcionou certinho para minha necessidade.
Abraços,
Celsobtu
óTIMA
Enviado: Ter, 17 Out 2006 2:29 pm
por fmarttos
Maravilha ...
É bom saber que temos profissionais e amigos neste site .....
"dr_gori" valeu pela dica ... precisei e funcionou corretamente
Abs