Oracle SQL 空行顺序

哈维托雷

我有下表:

姓名
(空)
姓名1
姓名2
姓名 3
(空)
姓名 4

我想生成这个输出:

姓名 输出
(空) 匿名者
姓名1 姓名1
姓名2 姓名2
姓名 3 姓名 3
(空) 匿名者2
姓名 4 姓名 4

通过以下查询,我可以生成下表

WITH aux ( name ) AS (
    SELECT
        NULL
    FROM
        dual
    UNION ALL
    SELECT
        'Name1'
    FROM
        dual
    UNION ALL
    SELECT
        'Name2'
    FROM
        dual
    UNION ALL
    SELECT
        'Name3'
    FROM
        dual
    UNION ALL
    SELECT
        NULL
    FROM
        dual
    UNION ALL
    SELECT
        'Name4'
    FROM
        dual
)
SELECT
    a.*,
    nvl(name, concat('Anon', ROW_NUMBER() OVER(
        PARTITION BY name
        ORDER BY
            ROWNUM
    ))) output
FROM
    aux a;
姓名 输出
姓名1 姓名1
姓名2 姓名2
姓名 3 姓名 3
姓名 4 姓名 4
(空) 匿名者
(空) 匿名者2

但是,空值出现在末尾而不是原始顺序。有没有办法防止这种情况?

戈登·利诺夫

SQL 表表示无序(多)集。没有排序,除非一列指定了排序。如果没有指定行顺序的列,您的问题就没有意义。

如果我假设您有一个排序列,那么您可以执行以下操作:

select name,
       coalesce(name,
                'anon' || row_number() over (partition by name order by <ordering col>
               ) as output
from aux
order by <ordering col>;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章