繁体   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