sql - PL/SQL 查找并让行重复

标签 sql oracle plsql distinct oracle18c

我有一个包含 10 列的表格。看起来像这样

NULL 1 1 NULL NULL NULL NULL NULL 2 NULL
1 NULL NULL 2 NULL 1 NULL NULL 2 NULL
NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL 2 NULL

我需要一个返回以下内容的 SQL 查询:(按行不同)

1 2
1 2
NULL
2

最佳答案

您可以使用层次结构查询,如下所示:

SELECT LISTAGG(E, ' ') WITHIN GROUP( ORDER BY E )
FROM
    ( SELECT DISTINCT
            ROWID AS RID,
            DECODE(COLUMN_VALUE, 1, COL1, 2, COL2, 3, COL3, 4, COL4 ..., 10, COL10) AS E
        FROM YOUR_TABLE
             CROSS JOIN TABLE ( CAST(MULTISET(
                SELECT LEVEL
                  FROM DUAL
                CONNECT BY LEVEL <= 10 ) AS SYS.ODCINUMBERLIST) )
    )
GROUP BY RID;

关于sql - PL/SQL 查找并让行重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61231126/

相关文章:

php - MySQL:为每个分组仅打印一次数据

mysql - 在一个大表中搜索 varchar

oracle - Rows在解释计划中表示什么?

java - oracle 11g数据库和java 1.5问题

oracle - PL/SQL <<单词>>的含义是什么

oracle - 如何从 TOAD for Oracle 执行函数并将结果绑定(bind)到数据网格

sql - 窗口函数解决复杂的日期操作

mysql - 带有 WHERE 条件的 Postgres LEFT JOIN

oracle - 如何在oracle中使用2位小数进行四舍五入

java - Oracle 表被 Hibernate 丢弃;从回收站闪回到DB。出现错误 "SQL Error: 942, SQLState: 42000"