2014-03-12 44 views
0

我需要從兩個值匹配的兩個表中提取數據。連接表產生5行,並總是產生5行。帶有內部聯接的ORACLE Listagg

有沒有一種方法,我可以採取一列不同的值,並在單行返回多列?

有關示例: 表A: orig_zip,dest_zip,pri_mode

表B: orig_zip,dest_zip,serv_comm

表B將始終在表A中,當返回5分的結果,每1個結果做一個內部連接如下:

SELECT a.orig_zip, a.dest_zip, b.serv_comm, a.pri_mode 
FROM A a 
INNER JOIN B b 
ON a.orig_zip = b.orig_zip and a.dest_zip = b.dest_zip 
ORDER BY a.orig_zip, a.dest_zip, b.mail_class; 

如何獲取5個結果,並將它們轉換爲oracle中的單個行。結果中唯一不同的字段是serv_comm字段。

最後一行應具有以下設置:

[ORIG_ZIP] [DEST_ZIP] [SERV_COMM1] [SERV_COMM2] [SERV_COMM3] [SERV_COMM4] [SERV_COMM5] [PRI_MODE]

回答

0

從11g中,您也可以使用PIVOT子句做到這一點:

FROM trans_mode a 
INNER JOIN servcomm b 
ON a.orig_zip = b.orig_zip and a.dest_zip = b.dest_zip 
pivot 
(
    max(serv_comm) 
    for (mail_class) 
    in ('PRI' AS pri_serv, 'FCM' AS fcm_serv, 'PER' AS per_serv, 'PKG' AS pkg_serv, 'STD' AS std_serv) 
); 

Here is a sqlfiddle demo (based on yours)

+0

謝謝,我會嘗試了這一點! – Evidencex