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