3

私がやろうとしていることを最も明確に示していると思うので、例を使ってこの質問をすることにしました。

次の表があるとします。

member   number  time
------   -----   -----
  1        2     19:21 
  1        4     19:24 
  1       27     19:37
  2        4     19:01
  2        7     21:56
  2        8     22:00
  2        21    22:01

次の列を取得するにはどうすればよいですか?

member   number  new column
------   -----   ---------
  1        2       2.4.27 
  1        4       2.4.27
  1       27       2.4.27
  2        4       4.7.8.21
  2        7       4.7.8.21
  2        8       4.7.8.21
  2       21       4.7.8.21

編集:

DB2SQLを使用しています。

各メンバーの行数は必ずしも同じではありません。

順序は時間によって決定されます。

4

3 に答える 3

1

db2 のバージョンによっては、LISTAGG()関数を使用できる場合があります。9.7 以降のすべての db2 バージョンに含まれていると思います。

例:

select
  member,
  number,
  listagg(number,',') as new_column
from
  tablename
group by
  member
于 2012-12-13T18:29:19.840 に答える
0

Oracleでは、これでうまくいきます。

select a.member,a.number,b.newcol from table a,(select member,replace(wm_concat(number),',','.') newcol from test11 group by member)b where a.member=b.member;
于 2012-12-13T18:15:15.757 に答える
0

あなた自身の質問に答えるのが悪い形式であることは知っていますが、次の便利なページを見つけました。

https://www.ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/entry/aggregating_strings42?lang=en

そこのコードを変更すると、次のようになります。

create table test (member int, number int, time_stamp time)`;

insert into test values 
(1,2,'19:21'),
(1,4,'19:24'),
(1,27,'19:37'),
(2,4,'19:01'),
(2,7,'21:56'),
(2,8,'22:00'),
(2,21,'22:01');

select 
  member, substr(xmlcast(xmlgroup('.' || number as a order by time_stamp) as varchar(60)), 2)
from test
group by member
于 2012-12-13T18:39:00.330 に答える