3

この質問が以前に他のどこかで尋ねられたかどうかはわかりません。入れ方もわかりません。しかし、私はシナリオで説明します。
次のテーブル
TAB1と列があります:USERID、CODE、COUNTRY
TAB2と列:USERID、CODE、EMAIL

内容例:

TAB1:
RISHI, A1B2C3, INDIA
RISHI, D2E3F4, INDIA
KANTA, G3H4I5, INDONESIA

TAB2:
RISHI, A1B2C3, rishi1@test.com
RISHI, A1B2C3, rishi2@test.com
RISHI, A1B2C3, rishi3@test.com
RISHI, D2E3F4, rishi1@test.com
RISHI, D2E3F4, rishi2@test.com
KANTA, G3H4I5, kanta1@test.com

selectクエリまたはpl/sqlストアドプロシージャに必要なのは、次のような結果です。

RISHI, INDIA, A1B2C3, (rishi1@test.com, rishi2@test.com, rishi3@test.com)
RISHI, INDIA, D2E3F4, (rishi1@test.com, rishi2@test.com)

私が次のような選択をした場合:

select a.userid, a.code, a.country, b.email
from tab1.a, tab2.b
where a.userid = b.userid
and a.code = b.code
and a.userid = 'RISHI';

結果は次のようになります:

RISHI, INDIA, A1B2C3, rishi1@test.com
RISHI, INDIA, A1B2C3, rishi2@test.com
RISHI, INDIA, A1B2C3, rishi3@test.com
RISHI, INDIA, D2E3F4, rishi1@test.com
RISHI, INDIA, D2E3F4, rishi2@test.com

基本的に必要なのは、配列にグループ化された電子メールIDです。TAB1には実際に必要な列がさらに多く含まれていると仮定しますが、この例では省略していますが、TAB2にはこれらの3つの列しかありません。

4

2 に答える 2

2
select a.userid, a.code, a.country, listagg(b.email, ',') within group (order by b.email) as "Emails"
from tab1.a, tab2.b
where a.userid = b.userid
and a.code = b.code
and a.userid = 'RISHI'
group by a.userid, a.code, a.country;
于 2012-02-03T13:09:09.870 に答える
0

GROUP_CONCATMySQLで集計関数を使用したいと思います。悪いニュースは、Oracleにはグループの統合のための組み込み関数がないことです。良いニュースは、そのような機能をエミュレートできることです。

このスニペットを見てください:

with data
     as
     (
          select job,
                ename,
                row_number() over (partition by job order by ename) rn,
                count(*) over (partition by job) cnt
      from emp
     )
 select job, ltrim(sys_connect_by_path(ename,','),',') scbp
  from data
  where rn = cnt
  start with rn = 1
  connect by prior job = job and prior rn = rn-1
  order by job

そして戻ってきます

JOB       SCBP
--------- ----------------------------------------
ANALYST   FORD,SCOTT
CLERK     ADAMS,JAMES,MILLER,SMITH
MANAGER   BLAKE,CLARK,JONES
PRESIDENT KING
SALESMAN  ALLEN,MARTIN,TURNER,WARD

参照

于 2012-02-03T13:01:45.953 に答える