2017-05-30 105 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