如何将多个oracle行合并为一个?

时间:2015-01-23 14:02:14

标签: oracle

在这种oracle情况下,如何在单个查询中获得以下结果?

Table 1
Customer | Order_Number  
1          1
1          2 
2          1 

Table 2 
Customer | Order_Number  | Employee | Tag
1            1             Bob        on hold
1            1             Larry      shipped
1            2             Larry      shipped

Results
Customer   | Order_Number   | Tags
1              1               Bob - on hold; Larry - shipped
1              2               Larry - shipped;
2              1               (Empty or null) 

我将标签作为单个字符串返回时被绊倒了。

2 个答案:

答案 0 :(得分:1)

您需要LISTAGG

如果您的Oracle版本足够老,可以将其替换为user-defined aggregate functionWM_CONCATSYS_CONNECT_BY_PATH

答案 1 :(得分:1)

您尚未提及DB version。所以答案完全取决于你的版本。

如果您在11g及以上,请使用LISTAGG

但是,如果您处于pre 11g版本,那么您有以下选项:

  1. Oracle 9i中的ROW_NUMBER()和SYS_CONNECT_BY_PATH函数
  2. Oracle 10g中的COLLECT功能
  3. Tom Kyte在http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:2196162600402 建议的
  4. STRAGG 功能

    注意:从不在生产系统中使用WM_CONCAT,它没有记录。只需将SR提升为Oracle支持并说您已使用它,并查看响应。它并不存在于12c

    此处有更多示例http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php