簡體   English   中英

具有內部聯接的ORACLE Listagg

[英]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的答案!

http://sqlfiddle.com/#!4/783b8/1/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)
  );

這是一個sqlfiddle演示(基於您的演示)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM