2017-05-30 95 views
2

嗨,我有一个要求。我的表格中有以下数据。通过组合数据查询Sql group

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 

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

+0

其中'rdbms'? '甲骨文/ MSSQL/MySQL的...'? – Praveen

+0

谢谢。甲骨文 –

+0

为什么结果列表跳两次座位,如果其中一个是其他和最后一分钟移民列出一次...所以你期望不同的原因? – xQbert

回答

3

您可以使用LISTAGG

注:ListAgg只能从Oracle版本11克;对于旧版本请参考xQbert答案;

尝试;

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 

如果只想distinctreasons即可;

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 
+0

谢谢。我得到了“LISTAGG”:无效的标识符。 –

+0

您正在使用的Oracle版本? 'listagg'只能从'Oracle11g'获得.. – Praveen

+0

由于第二次飞行在预期结果中没有重复,因此可能需要列表agg中的一个不同。 – xQbert