繁体   English   中英

Oracle SQL在一个查询中选择多列不同的值,并根据不同的值对每一列进行分页

[英]Oracle SQL select multiple columns distinct values in one query with pagination requirement for each column based on distinct value

我的桌子包含如下内容

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? 不需要Customer_Id。

复杂性在于,我需要将两列的唯一值计数限制为每列(第一个)100条记录。

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

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

如果该列的不重复值小于100,则为该两列返回null(或无值)是可以的。

这只是我原始查询的一小部分,剩下的我可以处理。 请帮忙。

这样的要求永远不会到来,不是很完美,但是可以

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM