我的表格包含如下内容,
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(或无值)都可以。
这只是我原始查询的一小部分,其余的我可以管理。 请帮忙。
答案 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