Oracle 从当前行到最后一行的计数

Oracle 从当前行到最后一行的计数,oracle,Oracle,我需要以下面的方式提取数据 progress_CMC_status progress_cmc_status_numbers cmc_status_numbers Mature Draft 2 5 Review 0 3 Final Draft

我需要以下面的方式提取数据

progress_CMC_status    progress_cmc_status_numbers    cmc_status_numbers
Mature Draft                         2                         5
Review                               0                         3
Final Draft                          0                         3
Final Comment                        0                         3
Final Document                       2                         3
Archived Document                    1                         1
但我得到的输出是不同的

progress_CMC_status    progress_cmc_status_numbers    cmc_status_numbers
Mature Draft                         2                         5
Review                               0                         0
Final Draft                          0                         0
Final Comment                        0                         0
Final Document                       2                         3
Archived Document                    1                         1
尝试了以下代码:

  WITH sta AS
  (SELECT 'Mature' "status1"
  FROM DUAL
  UNION
  SELECT 'Review'
    FROM DUAL
  UNION
  SELECT 'Final Draft'
    FROM DUAL
  UNION
  SELECT 'Final Comment'
    FROM DUAL
  UNION
  SELECT 'Final Document'
    FROM DUAL
  UNION
  SELECT 'Archived'
    FROM DUAL)
  SELECT   DECODE ("stat",
             'Mature', 'Mature Draft',
             'Review', 'Review',
             'Final Draft', 'Final Draft',
             'Final Comment', 'Final Comment',
             'Final Document', 'Final Document',
             'Archived', 'Archived Document'
            ) AS "progress_CMC_status",
  NVL
        (TO_CHAR ("progress_cmc_status_numbers"),
         0
        ) AS "progress_cmc_status_numbers",
  NVL (TO_CHAR ("cmc_status_numbers"), 0) AS "cmc_status_numbers"
  FROM (SELECT "status1" AS "stat",
             NVL
                (TO_CHAR (NULL),
                 "progress_cmc_status_numbers"
                ) AS "progress_cmc_status_numbers",
             NVL (TO_CHAR (NULL),
                  "cmc_status_numbers"
                 ) AS "cmc_status_numbers"
   FROM sta
   LEFT JOIN
   (SELECT   VALUE AS "progress_CMC_status",
                       COUNT (*) AS "progress_cmc_status_numbers",
                       SUM (COUNT (*)) OVER (ORDER BY DECODE
                                                        (VALUE,
                                                         'Mature', 0,
                                                         'Review', 1,
                                                         'Final Draft', 2,
                                                         'Final Comment', 3,
                                                         'Final Document', 4,
                                                         'Archived', 5,
                                                         6
                                                        ) DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
                                                  AS "cmc_status_numbers"
                  FROM ATTRIBUTES
                 WHERE attribute_type_id IN (
                                            SELECT attribute_type_id
                                              FROM attribute_types
                                             WHERE name_display_code =
                                                                      'RD')
                   AND VALUE IN
                          ('Mature', 'Review', 'Final Draft',
                           'Final Comment', 'Final Document', 'Archived')
                   AND object_id IN (SELECT obj_id
                                       FROM docs)
              GROUP BY VALUE) a1 ON sta."status1" =
                                                  a1."progress_CMC_status"
             )
  ORDER BY DECODE ("progress_CMC_status",
             'Mature Draft', 0,
             'Review', 1,
             'Final Draft', 2,
             'Final Comment', 3,
             'Final Document', 4,
             'Archived Document', 5,
             6
            )
样本数据

          CREATE TABLE ATTRIBUTES
         (
         object_id NUMBER(4),
         attribute_type_id NUMBER(4),
         name_display_code VARCHAR2(5),
         VALUE VARCHAR2(25)
          );

         begin
         insert into attributes values (101,201,'RMD','A100');
         insert into attributes values (102,201,'RMD','A200');
         insert into attributes values (103,201,'RMD','A300');
         insert into attributes values (104,200,'RD','Mature');
         insert into attributes values (105,200,'RD','Mature');
         insert into attributes values (106,200,'RD','Mature');
         insert into attributes values (107,200,'RD','Mature');
         insert into attributes values (108,200,'RD','Mature');
         insert into attributes values (109,200,'RD','Archived');
         insert into attributes values (110,200,'RD','Archived');
         insert into attributes values (111,200,'RD','Archived');
         insert into attributes values (112,200,'RD','Archived');
         insert into attributes values (113,200,'RD','Mature');
         insert into attributes values (114,200,'RD','Mature');
         insert into attributes values (115,200,'RD','Mature');
         insert into attributes values (116,200,'RD','Mature');
         insert into attributes values (117,200,'RD','Final Document');
         insert into attributes values (118,200,'RD','Final Document');
         insert into attributes values (119,201,'RMD','A400');
         insert into attributes values (120,201,'RMD','A500');
         end;
         /

        CREATE TABLE docs
        (
        obj_id NUMBER(4)
        );


        BEGIN
        INSERT INTO docs
        VALUES (100);

        INSERT INTO docs
        VALUES (104);

        INSERT INTO docs
        VALUES (109);

        INSERT INTO docs
        VALUES (117);

        INSERT INTO docs
        VALUES (118);

        INSERT INTO docs
        VALUES (119);

        INSERT INTO docs
        VALUES (120);  
        END;
        /


       CREATE TABLE attribute_types
       (
       attribute_type_id NUMBER(4),
       name_display_code VARCHAR2(5)
       );


       INSERT INTO attribute_types
       VALUES (200, 'RD');


       INSERT INTO attribute_types
       VALUES (201, 'RMD');

你好,伊戈尔,谢谢你的回答。这里我需要左连接来提取丢失的数据。@ravt-用我的子查询替换你的子查询(在左连接下)。嗨,我试过了,但没有成功。。假设job有奖金@ravt-我需要样本数据来了解您的问题所在。@ravt-您应该在上层选择中计算
sum()over()
。您是否希望“上述所有”作业(
ordr=6
)以任何方式成为结果的一部分?例如,如果有一个名为
程序员
的工作,这会对您的结果产生什么影响?对不起。。。我忘了将筛选器放在作业所在的位置(这6个作业),只需拉出6个值。如果需要,我将更新查询。无需执行此操作;可能还有一两个问题。我会看看我能不能想出点什么。ravt-你能按照下面@EgorSkriptunoff的要求发布一些样本数据吗?最好发布一些
EMP
记录,并确保其中至少有两个具有相同的
作业
,以及您发布的记录的预期结果。嗨,我添加了一些示例数据。
WITH sta AS
  (SELECT 'Mature' "status1" FROM DUAL UNION
  SELECT 'Review' FROM DUAL UNION
  SELECT 'Final Draft' FROM DUAL UNION
  SELECT 'Final Comment' FROM DUAL UNION
  SELECT 'Final Document' FROM DUAL UNION
  SELECT 'Archived' FROM DUAL)
SELECT 
  DECODE ("stat",
             'Mature', 'Mature Draft',
             'Review', 'Review',
             'Final Draft', 'Final Draft',
             'Final Comment', 'Final Comment',
             'Final Document', 'Final Document',
             'Archived', 'Archived Document'
  ) AS "progress_CMC_status",
  NVL("progress_cmc_status_numbers", 0) AS "progress_cmc_status_numbers",
  SUM (NVL("progress_cmc_status_numbers", 0)) OVER (ORDER BY 
            -DECODE ("stat",
            'Mature', 0,
            'Review', 1,
            'Final Draft', 2,
            'Final Comment', 3,
            'Final Document', 4,
            'Archived', 5,
            6) 
   ) AS "cmc_status_numbers"
FROM 
  (
    SELECT 
      "status1" AS "stat",
      "progress_cmc_status_numbers"
    FROM 
      sta
      LEFT JOIN (
        SELECT   
          VALUE AS "progress_CMC_status",
          COUNT (*) AS "progress_cmc_status_numbers"
        FROM ATTRIBUTES
        WHERE 
          attribute_type_id IN (
            SELECT attribute_type_id
            FROM attribute_types
            WHERE name_display_code = 'RD'
          )
          AND VALUE IN ('Mature', 'Review', 'Final Draft',
            'Final Comment', 'Final Document', 'Archived')
          AND object_id IN (SELECT obj_id FROM docs)
        GROUP BY VALUE
      ) a1 ON sta."status1" = a1."progress_CMC_status"
  )
  ORDER BY DECODE ("progress_CMC_status",
             'Mature Draft', 0,
             'Review', 1,
             'Final Draft', 2,
             'Final Comment', 3,
             'Final Document', 4,
             'Archived Document', 5,
             6)