mysql - 如何在 Oracle 中获取相似的值

标签 mysql oracle

我有一个两列的表格

Col1  Col2
A        1
A        2
A        3
B        1
B        2
B        3

我需要的输出是这样的

Col1    Col2
A       1
A       1,2
A       1,2,3
B       1
B       1,2
B       1,2,3

提前谢谢你。

最佳答案

这是一个适用于 MySQL 的解决方案。它在 select 子句中使用相关子查询将 Col2 值组合在一起。其逻辑是,对于共享相同 Col1 值的给定记录组,我们仅聚合小于或等于当前行的值。

SELECT
    Col1,
    (SELECT GROUP_CONCAT(t2.Col2 ORDER BY t2.Col2) FROM yourTable t2
     WHERE t2.Col2 <= t1.Col2 AND t1.Col1 = t2.Col1) Col2
FROM yourTable t1
ORDER BY
    t1.Col1,
    t1.Col2;

enter image description here

Demo

这是 Oracle 中的相同查询:

SELECT
    Col1,
    (SELECT LISTAGG(t2.Col2, ',') WITHIN GROUP (ORDER BY t2.Col2) FROM yourTable t2
     WHERE t2.Col2 <= t1.Col2 AND t1.Col1 = t2.Col1) Col2
FROM yourTable t1
ORDER BY
    t1.Col1,
    t1.Col2;

Demo

请注意,唯一真正的变化是将 GROUP_CONCAT 替换为 LISTAGG

关于mysql - 如何在 Oracle 中获取相似的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55321465/

相关文章:

php - 外部数据库注册插件 "Error reading data from the external course table"

c# - 从 MySQL 表接收 DownloaLink

php - Laravel 迁移不适用于 MySQL (InnoDB)

oracle - Oracle日期差获取年数

oracle - PL/SQL : How to detect which browser is being used?

Mysql:回滚多个查询

php - 将下拉列表值保存到 php session

oracle - 第三方Oracle .NET提供商的比较

SQL 聚合函数 : Sum of some rows in another row

oracle - 如果存在则删除索引...如果存在则创建