0

私は2つのテーブルを持っています、

テーブル 1には次のフィールドがあります。

u_id    id      no
12      51      1
21      51      2
31      51      3
41      51      4
51      51      5
61      51      6
72      51      7
81      51      8
91      51      9
92      51      10

テーブル 2には次のフィールドがあります。

id      one     two     three   four    five    six     seven   eight   nine    ten

51      12      21      31      41      51      61      72      81      91      92

いいえを確認する必要があります。およびテーブル 1 の ID を取得し、対応する u_id をテーブル 2 に挿入します。

たとえば。id = 51 で no が 1 の場合、u-id 値を表 2 の列 1 に挿入する必要があります。

そして id = 51 と no = 2 を列 2 に挿入し、以下同様に.. 助けてください。オラクルを使用しています。

4

4 に答える 4

1

新しいテーブルを作成する場合、またはデータベースからこのセットを返す必要がある場合は、これを行うためにピボット テーブルが必要になります...

select * from table 1

pivot (max (u_id) for id in ([1],[2],[3],[4],[5],[6],[7],[8],[9])[10]) as table 2
于 2013-06-12T05:45:34.383 に答える
0

これはあなたが探しているものですか:

// prepopulate missing table2 entries with 0s
insert into table2 (id, one, two, three, four, five, six, seven, eight, nine, ten)
    select distinct t1.id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    from   table1 t1
    where  t1.id not in (select id from table2 t2 where t1.id = t2.id);

// update table2 entries with the values from table1
update table2 
set one = (select u_id
          from   table1 t1
          where  t1.id = table2.id
          and    t1.no = 1);

update table2 
set two = (select u_id
          from   table1 t1
          where  t1.id = table2.id
          and    t1.no = 2);

// and so on....
于 2013-06-12T05:44:22.757 に答える
0

単一のクエリで実行できるとは思いません。そのための PLSQL ブロックを作成する必要があります。

  1. まず、テーブル 1 からすべての一意の ID を一覧表示します
  2. for-each を反復処理し、対応する u_id をテーブル 2 の連続する列に挿入します。

あくまでも理論上の説明です。

于 2013-06-12T05:10:37.330 に答える
0

ID は一意である必要があります

select id,
sum(u_id*(if no = 1 then 1 else 0 endif)) as one,
sum(u_id*(if no = 2 then 1 else 0 endif)) as two,
sum(u_id*(if no = 3 then 1 else 0 endif)) as three,
sum(u_id*(if no = 4 then 1 else 0 endif)) as four,
sum(u_id*(if no = 5 then 1 else 0 endif)) as five,
sum(u_id*(if no = 6 then 1 else 0 endif)) as six,
sum(u_id*(if no = 7 then 1 else 0 endif)) as seven,
sum(u_id*(if no = 8 then 1 else 0 endif)) as eight,
sum(u_id*(if no = 9 then 1 else 0 endif)) as nine,
sum(u_id*(if no = 10 then 1 else 0 endif)) as ten
from table_1 group by id;
于 2013-06-12T05:34:05.600 に答える