GJSS Ответов: 0

Подзапрос для получения желаемого результата с правильными соединениями


Привет - у меня есть этот подзапрос, предназначенный для получения выходных данных, где количество строк всего вывода запроса должно совпадать с количеством строк(13402) подзапроса "А", но я получаю количество строк как 13552.Цель состоит в том, чтобы получить подробную информацию обо всех желаемых подсчетах для всех перечисленных проектов из выходных данных запроса " а " (он должен возвращать нулевое значение, если оно не совпадает ни с одним из других подзапросов.

Что я уже пробовал:

SELECT  first_scan_issues.SOA_SECTOR,  
        first_scan_issues.SOA_REGION,  
        a.PROJECT,  
        a.SOLUTION,  
        first_scan_issues.CNT1,  
       first_scan_issues.CNT2,  
       first_file_scans.CNT7,  
       project_files_count.COUNT,  
        last_scan_issues.CNT3,  
        last_scan_issues.CNT4,  
        last_file_scans.CNT8,  
       prior_scan_issues.CNT5,  
        prior_scan_issues.CNT6,  
         prior_file_scans.CNT9,       
        CURRENT_DATE  
      FROM(select PROJECT,SOLUTION,FIRST_SCAN_ID,LAST_SCAN_ID,PRIOR_SCAN_ID from table1) a  
      LEFT OUTER JOIN  
      (  
      select  PROJECT,SCAN_ID,COUNT(ISSUE_ID) CNT1,  
        COUNT(DISTINCT FILE_ID) CNT2,SOA_SECTOR,SOA_REGION  
        from table2 group by PROJECT,SCAN_ID,SOA_SECTOR,SOA_REGION  
      )first_scan_issues on first_scan_issues.SCAN_ID = a.FIRST_SCAN_ID  
      LEFT OUTER JOIN  
      (   select  PROJECT,SCAN_ID,COUNT(ISSUE_ID) CNT3,  
        COUNT(DISTINCT FILE_ID) CNT4,SOA_SECTOR,SOA_REGION  
        from table2 group by PROJECT,SCAN_ID,SOA_SECTOR,SOA_REGION  
      )last_scan_issues ON last_scan_issues.SCAN_ID = a.LAST_SCAN_ID  
      LEFT OUTER JOIN  
      (  
       select  PROJECT,SCAN_ID,COUNT(ISSUE_ID) CNT5,  
        COUNT(DISTINCT FILE_ID) CNT6,SOA_SECTOR,SOA_REGION  
        from table2 group by PROJECT,SCAN_ID,SOA_SECTOR,SOA_REGION  
      )prior_scan_issues ON PRIOR_scan_issues.SCAN_ID = a.PRIOR_SCAN_ID  
      LEFT OUTER JOIN  
      (  
      select SCAN_ID,COUNT(DISTINCT FILE_ID) CNT7 from table2   
      group by SCAN_ID  
      )first_file_scans ON first_file_scans.SCAN_ID = a.FIRST_SCAN_ID  
      LEFT OUTER JOIN  
      (  
      select SCAN_ID,COUNT(DISTINCT FILE_ID) CNT8 from table2  
       group by SCAN_ID  
      )last_file_scans ON last_file_scans.SCAN_ID = a.LAST_SCAN_ID  
      LEFT OUTER JOIN  
      (  
      select SCAN_ID,COUNT(DISTINCT FILE_ID) CNT9 from table2  
       group by SCAN_ID  
      )prior_file_scans ON prior_file_scans.SCAN_ID = a.PRIOR_SCAN_ID  
       LEFT OUTER JOIN  
      (  
      SELECT  PROJECT,SOLUTION,COUNT(DISTINCT PATH) COUNT   
               FROM table2 GROUP BY PROJECT,SOLUTION) project_files_count  
          ON project_files_count.PROJECT = a.PROJECT);  
Table 1  
CREATE TABLE table1 (  
  PROJECT       VARCHAR2(256 CHAR) NOT NULL,  
  SOLUTION      VARCHAR2(256 CHAR),  
  FIRST_SCAN_ID NUMBER(10)         NOT NULL,  
  LAST_SCAN_ID  NUMBER(10)         NOT NULL,  
  PRIOR_SCAN_ID NUMBER(10)         NOT NULL,  
  CONSTRAINT pk_tmp_first_last_scan_ids_id PRIMARY KEY (PROJECT)  
);  
Table 2  
CREATE TABLE table2  
(  
  ISSUE_ID         NUMBER(10)  
    CONSTRAINT RPT_ISSUE_SUMMARY_PK  
    PRIMARY KEY,  
  SOA_SECTOR       VARCHAR2(128),  
  SOA_REGION       VARCHAR2(128),  
  USERNAME         VARCHAR2(128),  
  PROJECT          VARCHAR2(256),  
  SOLUTION          VARCHAR2(256),  
  PATH             VARCHAR2(2048),  
  TIME             DATE,  
  CATEGORY         VARCHAR2(512),  
  TITLE            VARCHAR2(512),  
  ISSUE_IMP        VARCHAR2(256),  
  CLICKED          NUMBER(3),  
  SCAN_ID          NUMBER(10),  
  SESSION_ID       NUMBER(10),  
  RULEPACK_RULE_ID NUMBER(10),  
  FILE_ID          NUMBER(10),  
  FILE_INFO_ID     NUMBER(10),  
  SCAN_YEAR_MON    VARCHAR2(7),  
  SCAN_YEAR        VARCHAR2(4),  
  SCAN_MONTH       VARCHAR2(2),  
  LOAD_TIME        DATE NOT NULL  
);  

fatman45

COUNT(DISTINCT expression)
это дает вам количество уникальных значений, но это не делает весь подзапрос уникальным. Так, например, если существует несколько повторяющихся SCAN_IDs (поскольку он не имеет уникального ограничения), то вы получите больше результатов в своем выводе, чем запрос " a " будет производить.

0 Ответов