[英]ORACLE Listagg with an Inner Join
我需要從兩個值匹配的兩個表中提取數據。 聯接表產生5行,並將始終產生5行。
有沒有一種方法可以使一列具有不同的值並在一行中返回多列?
例如:表A:orig_zip,dest_zip,pri_mode
表B:orig_zip,dest_zip,serv_comm
進行內部聯接時,表B始終會在表A中的每1個結果中返回5個結果:
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]
我做了一些研究,這是SQL Fiddle的答案!
從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)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.