0

次のような情報を含む Oracle 10g のテーブルがあります。

SQL> select * from t_test;

      INFO     CODIGO GRUPO
---------- ---------- ----------
       101        190 VTOS
       100        130 VTOS
       102        140 VTOS

GRUPO='VTOS' を持つすべての行を抽出し、それらの行を列に転置したいと思います。CODIGO の値はあらかじめ決められているため (その列に格納できる値はわかっています)、次のようなものを取得したいと考えています。

INFO_190 INFO_130 INFO_140
-------- -------- --------
     101      100      102

たとえば、いくつかのサブクエリでそれを実行できることはわかっています。

SELECT (SELECT info
          FROM t_test
         WHERE codigo = 190 AND grupo = 'VTOS') info_190,
       (SELECT info
          FROM t_test
         WHERE codigo = 130 AND grupo = 'VTOS') info_130,
       (SELECT info
          FROM t_test
         WHERE codigo = 140 AND grupo = 'VTOS') info_140
  FROM DUAL

しかし、もっと効率的な方法を見つけたいと思います。誰でもそれを行う方法を提案できますか?

4

2 に答える 2

1

codigo 値の数が比較的少ないと仮定すると、次のようなものが機能するはずです。

select max(decode(codigo, 190, info, '')) info_190,
 max(decode(codigo, 130, info, '')) info_130,
 max(decode(codigo, 140, info, '')) info_140
from t_test
where grupo = 'VTOS';

複数のグループ値がある場合は、グループごとにグループ化し、select 句に含めます。

于 2010-06-21T15:30:15.930 に答える
0

これを試して..

select case CODIGO when 190 then INFO end AS INFO_190,
case CODIGO when 130 then INFO end AS INFO_130,
case CODIGO when 140 then INFO end AS INFO_140
from t_test where grupo = 'VTOS'
于 2010-06-21T15:32:09.307 に答える