【问题标题】:Oracle SQL select multiple columns distinct values in one query with pagination requirement for each column based on distinct valueOracle SQL 在一个查询中选择多个不同的列值,并根据不同的值对每列进行分页
【发布时间】:2014-02-05 05:48:52
【问题描述】:

我的表格包含如下内容,

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(或无值)都可以。

这只是我最初查询的一小部分,其余的我可以处理。 请帮忙。

【问题讨论】:

  • 不使用 GROUP BY 或者是某种测试?
  • GROUP BY attr1, attr2 给了我一个组合分组结果,其中我需要单独的 DISTINCT attr1、DISTINCT attr2 并选择 attr1 的前 100 个或更少,并选择 attr2 的前 100 个或更少。有时 attr1 可能只有 50 个值,但需要决定使用 rownum 或 rank。

标签: sql oracle


【解决方案1】:

这样的要求永远不会出现,虽然不完美但可以工作

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多