Oracle SQL在一个查询中选择多个列不同的值,并根据不同的值为每列添加分页要求

时间:2014-01-16 10:56:18

标签: sql oracle

我的表格包含如下内容,

  

CUSTOMER_ID ATTR1 ATTR2

     
     1  V1_0001    V2_0001
     2  V1_0001    V2_0001
     3  V1_0001    V2_0001
     4  V1_0001    V2_0002
     5  V1_0001    V2_0003
     6  V1_0002    V2_0004
     7  V1_0003    V2_0005
     8  V1_0004    V2_0005
     9  V1_0004    V2_0005
    10  V1_0005    V2_0006
    ..  .......    .......
100000  V1_0120    V2_0268

选择了100000行。

有没有什么方法可以在一个查询中选择每列的不同值(不使用列出的列组) - 也可以不使用UNION? <_ p>。不需要Customer_Id

复杂性是我需要将两列的不同值计数限制为(第一)每列100条记录。

换句话说,我的结果应该是,

  

ATTR1 ATTR2
  ------- -------
  V1_0001 V2_0001
  V1_0002 V2_0002
  V1_0003 V2_0003
  ....... .......
  V1_0100 V2_0100

如果该列的不同值低于100,则返回任何列的null(或无值)都可以。

这只是我原始查询的一小部分,其余的我可以管理。 请帮忙。

1 个答案:

答案 0 :(得分:0)

这种要求永远不会出现,但不是完美而是有效

with tab(ids, v1, v2) as (
select 1,'V1_0001', 'V2_0001' from dual union all
select 2,'V1_0001', 'V2_0001' from dual union all
select 3,'V1_0001', 'V2_0001' from dual union all
select 4,'V1_0001', 'V2_0002' from dual union all
select 5,'V1_0001', 'V2_0003' from dual union all
select 6,'V1_0002', 'V2_0004' from dual union all
select 7,'V1_0003', 'V2_0005' from dual union all
select 8,'V1_0004', 'V2_0005' from dual union all
select 9,'V1_0004', 'V2_0005' from dual union all
select 10,'V1_0005', 'V2_0006' from dual),
tab2 as (select v11, rownum r1 from
        (select distinct v1 as v11 from tab) where rownum <= 100),
tab3 as (select v22, rownum r2 from
        (select distinct v2 as v22 from tab) where rownum <= 100)
select v11, v22
  from tab2
 full outer join tab3 on (r1 = r2)

输出:

V11                          V22
---------------------------- ----------------------------
V1_0001                      V2_0001
V1_0002                      V2_0002
V1_0003                      V2_0003
V1_0004                      V2_0004
V1_0005                      V2_0005
                             V2_0006