Sql组通过查询与组合数据

时间:2017-05-30 12:56:08

标签: sql oracle group-by

嗨,我有一个要求。我的表格中有以下数据。

ID      REASON                     FLIGHT_KEY_ID           FLIGHT_NO                        
1709    abcddf                     0201_03/02/2016_MCT_BOM  201                     
1704    Jump Seats                 0201_03/02/2016_MCT_BOM  201                     
1706    Others                     0201_03/02/2016_MCT_BOM  201                     
1717    Last minute immigration    0225_28/04/2016_MCT_COK  225                     
1716    Last minute immigration    0225_28/04/2016_MCT_COK  225                     
1705    Last minute immigration    0225_28/04/2016_MCT_COK  225 

结果应为

REASON                        FLIGHT_KEY_ID           FLIGHT_NO 
abcddf,Jump Seats,Jump Seats  0201_03/02/2016_MCT_BOM 201
Last minute immigration       0225_28/04/2016_MCT_COK 225

我知道这可能吗?任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用LISTAGG

注意:ListAgg仅适用于oracle 11g版;对于旧版本,请参阅xQbert answer;

尝试;

select 
  LISTAGG(reason, ',') WITHIN GROUP (ORDER BY FLIGHT_NO) reason,
  FLIGHT_KEY_ID,
  FLIGHT_NO
from my_table
group by FLIGHT_KEY_ID, FLIGHT_NO

如果您只想distinct reasons,那么

select 
  LISTAGG(reason, ',') WITHIN GROUP (ORDER BY FLIGHT_NO) reason,
  FLIGHT_KEY_ID,
  FLIGHT_NO
from (
    select 
      distinct reason,
      FLIGHT_KEY_ID,
      FLIGHT_NO
    from my_table    
)
group by FLIGHT_KEY_ID, FLIGHT_NO

答案 1 :(得分:2)

Listagg可能在您的版本中不可用。早期版本的Oracle提供了wm_concat作为未记录的功能。 (使用风险自负,并注意它不在升级路径上(在12c中不存在))

SELECT 
  wm_Concat(distinct reason) reason,
  FLIGHT_KEY_ID,
  FLIGHT_NO
FROM my_table
GROUP BY FLIGHT_KEY_ID, FLIGHT_NO

问汤姆: https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9529613900346315631