基于sql server中的另一个值连续两次(1,2)序列

问题描述 投票:0回答:1

我需要根据oracle中的另一个列值empid对1,2进行排序。每列值我需要在序列输出列中有两个值

前虚拟数据

empid 深度
1 1

需要o/p

empid 深度 顺序
1 1 1
1 1 2

我们尝试使用 rownumber() 分区,但它仅根据另一列 deptid 排序一次,但我们需要对单个 empid 排序并递增两次 1,2

sql-server oracle sequence
1个回答
0
投票

这是某种行生成器。这是一种选择:

样本数据:

SQL> with dummy (empid, deptid) as
  2    (select 1, 1 from dual union all
  3     select 3, 4 from dual
  4    )

查询:

  5  select empid, deptid, column_value as sequence
  6  from dummy cross join
  7    table(cast(multiset(select level from dual
  8                        connect by level <= 2
  9                       ) as sys.odcinumberlist))
 10  order by empid, sequence;

     EMPID     DEPTID   SEQUENCE
---------- ---------- ----------
         1          1          1
         1          1          2
         3          4          1
         3          4          2

另一种选择是使用子查询,它联合两个序列行:

SQL> with dummy (empid, deptid) as
  2    (select 1, 1 from dual union all
  3     select 3, 4 from dual
  4    )
  5  select empid, deptid, sequence
  6  from dummy cross join (select 1 sequence from dual union all
  7                         select 2 from dual
  8                        );

     EMPID     DEPTID   SEQUENCE
---------- ---------- ----------
         1          1          1
         1          1          2
         3          4          1
         3          4          2

这也有效,但如果涉及更多序列值(不仅仅是两个),则不切实际,而第一个选项(行生成器)只需要您修改第 8 行中的值(您可以使用其他数字而不是2).

© www.soinside.com 2019 - 2024. All rights reserved.