Sql 按查询组合数据分组

Posted

技术标签:

【中文标题】Sql 按查询组合数据分组【英文标题】:Sql group by query with combine data 【发布时间】:2017-05-30 12:56:08 【问题描述】:

您好,我有一个要求。我的表中有以下数据。

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

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

【问题讨论】:

哪个rdbms?? Oracle/mssql/mysql...?? 谢谢。甲骨文 为什么结果会两次列出跳席,其中一个是其他的,最后一分钟的移民被列出一次......所以你期待不同的原因? 【参考方案1】:

您可以使用LISTAGG

注意:ListAgg 仅适用于 oracle 版本 11g;对于旧版本,请参阅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

如果你只想要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

【讨论】:

谢谢。我得到“LISTAGG”:无效标识符。 你使用的Oracle版本?? listagg 仅适用于 Oracle11g.. 考虑到预期结果中没有重复第二次飞行,可能需要在列表中添加一个不同的 agg。【参考方案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

【讨论】:

以上是关于Sql 按查询组合数据分组的主要内容,如果未能解决你的问题,请参考以下文章

数据库原理与应用实验5--[数据库的组合和统计查询]

SQL语句汇总——聚合函数分组子查询及组合查询

组合查询

SQL语句汇总(三)——聚合函数分组子查询及组合查询 - Darly

按多列分组时熊猫组合键

子查询事务