0

以下の方法でデータを取得する必要があります。

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');
4

1 に答える 1