2012-02-03 61 views
2

我不確定這個問題是否在其他地方被問到過。我不知道如何把它也。但我會解釋一個場景。
我有以下表
TAB1的列:USERID,代碼,國家
TAB2與列:USERID,CODE,EMAILPL/SQL - 選擇列值作爲字符串數組

示例內容:

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

TAB2: 
RISHI, A1B2C3, [email protected] 
RISHI, A1B2C3, [email protected] 
RISHI, A1B2C3, [email protected] 
RISHI, D2E3F4, [email protected] 
RISHI, D2E3F4, [email protected] 
KANTA, G3H4I5, [email protected] 

我從選擇查詢想要什麼或PL/SQL存儲過程是這樣的結果:

RISHI, INDIA, A1B2C3, ([email protected], [email protected], [email protected]) 
RISHI, INDIA, D2E3F4, ([email protected], [email protected]) 

如果我做了選擇,如:

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, [email protected] 
RISHI, INDIA, A1B2C3, [email protected] 
RISHI, INDIA, A1B2C3, [email protected] 
RISHI, INDIA, D2E3F4, [email protected] 
RISHI, INDIA, D2E3F4, [email protected] 

我基本上需要的是組合在一起爲一個陣列的電子郵件ID。假設TAB1包含更多列,但實際上我需要這些列,但在此示例中我省略了這些列,但TAB2只有這三列。

回答

1
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; 
+0

好了,發現這是隻在甲骨文11g第2版,我們正在使用版本1.謝天謝地,我的要求已經改變,我不需要這樣做再也沒有了。但這是一個非常有用的事情要知道。謝謝。 – rishi 2012-02-06 07:32:09

0

我想你想在MySQL中使用GROUP_CONCAT聚合函數。壞消息是,Oracle沒有內置的組合concactenation函數,好消息是你可以模擬這樣的功能。

看看這個片斷:

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 

REFERENCE

+1

11g提供LISTAGG – tbone 2012-02-03 13:10:27