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 按查询组合数据分组的主要内容,如果未能解决你的问题,请参考以下文章