Select que retorne Registros em colunas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qui, 23 Mar 2006 11:44 am

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:
Código: Selecionar todos
Cod | Produto | Operacao   | Tempo
1   | Acerola | Moer       | 20
1   | Acerola | Filtrar    | 18
1   | Acerola | Concentrar | 17


Preciso que me retorne da seguinte maneira

Código: Selecionar todos
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
celsobtu
Localização: Botucatu - SP

Mensagemem Qui, 23 Mar 2006 12:19 pm

Aí vai um exemplo de CROSSTAB:

Código: Selecionar todos
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.
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Sex, 24 Mar 2006 3:27 pm

Valeu amigão !!! Obrigado pela dica. funcionou certinho para minha necessidade.
Abraços,
Celsobtu
celsobtu
Localização: Botucatu - SP

Mensagemem Ter, 17 Out 2006 2:29 pm

:) Maravilha ...

É bom saber que temos profissionais e amigos neste site .....
"dr_gori" valeu pela dica ... precisei e funcionou corretamente

Abs
fmarttos
Localização: SP

Francisco Alves
Consultor Oracle


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem