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
celsobtu
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 23 Mar 2006 11:23 am
Localização: Botucatu - SP

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
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

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

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.
celsobtu
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 23 Mar 2006 11:23 am
Localização: Botucatu - SP

Valeu amigão !!! Obrigado pela dica. funcionou certinho para minha necessidade.
Abraços,
Celsobtu
fmarttos
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 17 Out 2006 2:23 pm
Localização: SP
Francisco Alves
Consultor Oracle

:) Maravilha ...

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

Abs
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 24 visitantes