【问题标题】:Oracle analytical query to group rows用于分组行的 Oracle 分析查询
【发布时间】:2020-06-08 17:44:56
【问题描述】:

我有一个有 2 列 tsf_no 和 item 的表,一个 tsf_no 可以有超过 1 个项目。我想要一个查询,它将为每 n 行分配序号(比如 thrd_id)。这个 n 是一个变量。我写了一个查询,但还没有。注:4 为 n(变量)。它为每 n 行分配序列号,但 tsf_no 100018628942 在 1 和 2 的 thrd_id 中都存在,这是我不想要的。

预期结果

如果 n = 2 那么结果将是

    WITH 
    thrd_tbl AS (
    SELECT DISTINCT tsf_no,
                    thrd_id,
                    item
      FROM (SELECT tsf_no,
                   item,
                   CEIL(DENSE_RANK() OVER (ORDER BY tsf_no,item)/**4**) thrd_id
              FROM tsf_item))
    SELECT * FROM thrd_tbl;



    CREATE TABLE TSF_ITEM(TSF_NO NUMBER(12),
                          ITEM   VARCHAR2(25))

    /
    REM INSERTING into TSF_ITEM
    SET DEFINE OFF;
    Insert into TSF_ITEM (TSF_NO,ITEM) values (100018628027,'313549828');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018628027,'313815940');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018628027,'314075650');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018628942,'308708641');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018628942,'308708688');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018628942,'309959701');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018630248,'313870503');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018630248,'313870507');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018630289,'312547432');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018630289,'312547433');
Insert into TSF_ITEM (TSF_NO,ITEM) values (100018630289,'312547437');

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    我有点困惑。您的结果不需要任何“4”。您可以使用:

    DENSE_RANK() OVER (ORDER BY tsf_no)
    

    也许这可以解决您的问题。如果没有,您应该提供更清晰的数据来说明您想要做什么。

    【讨论】:

    • 正如我所说的 4 是一个变量。它可以是 2,3 或 n 。它基本上决定了多少行将被分配相同的序列。检查我的 2 个示例屏幕截图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多