Как получить желаемый результат, изменив существующий запрос? - PullRequest
0 голосов
/ 13 марта 2019
SELECT NAME, TITLE_ID
FROM NAME
INNER JOIN KNOWN_FOR_TITLES USING (NAME_ID)
INNER JOIN NAMES_PROFESSIONS USING (NAME_ID)
INNER JOIN PROFESSIONS USING (PROFESSION_ID)
WHERE PROFESSIONS = 'actor' OR PROFESSIONS = 'actress'
ORDER BY NAME_ID;

Result I get when I run the query above

The desired result:

1 Ответ

0 голосов
/ 13 марта 2019
DECLARE
  SQLQRY CLOB;
  COLS CLOB;
BEGIN
  SELECT LISTAGG('''' || TITLE_ID || ''' as "TITLE_ID' ||'_'|| N || '"', ',') WITHIN GROUP (ORDER BY NULL)
  INTO   COLS
  FROM   (  
            WITH YOUR_TABLE AS( SELECT 'Fred Astire' NAME, 'tt0045537' TITLE_ID FROM DUAL
             UNION
             SELECT 'Fred Astire' NAME, 'tt0072038' TITLE_ID FROM DUAL
             UNION
             SELECT 'Fred Astire' NAME, 'tt0043044' TITLE_ID FROM DUAL
             UNION
             SELECT 'Fred Astire' NAME, 'tt0050419' TITLE_ID FROM DUAL
             )
            SELECT DISTINCT TITLE_ID, ROWNUM N FROM YOUR_TABLE
          );


  SQLQRY :=
  '      
  SELECT * FROM
  (
      WITH YOUR_TABLE AS( SELECT ''Fred Astire'' NAME, ''tt0045537'' TITLE_ID FROM DUAL
             UNION
             SELECT ''Fred Astire'' NAME, ''tt0072038'' TITLE_ID FROM DUAL
             UNION
             SELECT ''Fred Astire'' NAME, ''tt0043044'' TITLE_ID FROM DUAL
             UNION
             SELECT ''Fred Astire'' NAME, ''tt0050419'' TITLE_ID FROM DUAL
             )
      SELECT *
      FROM YOUR_TABLE
  )
  PIVOT
  (
    MAX(TITLE_ID) for TITLE_ID in (' || COLS  || ')
  )';
  OPEN RC FOR SQLQRY;

  DBMS_OUTPUT.PUT_LINE(SQLQRY);
  EXECUTE IMMEDIATE SQLQRY;
END;
...