Объединение двух операторов SELECT с использованием внешнего соединения с несколькими псевдонимами - PullRequest
1 голос
/ 16 ноября 2011

У меня есть сложное утверждение select, что при его выполнении я даю ему желаемую дату или диапазон дат, и вывод получен. Проблема в том, что я не знаю, как соединить один и тот же оператор SQL с первым оператором, имеющим 1 диапазон дат, а со вторым оператором, имеющим другой диапазон данных. Пример ниже:

Когда я выполняю оператор выбора, я выбираю для месяца ноября:
ИМЯ ПОЯВЛЕНИЯ Current_Gross_Hours (ноябрь)

При повторном выполнении оператора выбора я выбираю с января по ноябрь:
ИМЯ ПОЯВИТЕЛЯ Year_To_Date_Hours (январь - ноябрь)

Что я хочу:
ИМЯ СОБЫТИЙ Current_Gross_Hours (ноябрь) Year_To_Date_Hours (январь - ноябрь)

Оператор SQL Select выполняется правильно, если выполняется сам по себе. Но я не знаю, как присоединиться к ним. Вот код SQL, который я хочу написать, но я не знаю, как правильно написать оператор SQL. Любая помощь или направление очень ценится.

(SELECT DISTINCT
SUM("PSA"."AL_HOURS") AS "Current Gross Hours", "PSJ"."EMPLID","PSP"."NAME"
FROM
"PS_JOB" "PSJ", "PS_EMPLOYMENT" "PSE", "PS_PERSONAL_DATA" "PSP", "PS_AL_CHK_HRS_ERN" "PSA"
WHERE
((("PSA"."CHECK_DT" = TO_DATE('2011-11-01', 'YYYY-MM-DD')) AND
("PSJ"."PAYGROUP" = 'SK2') AND
(("PSJ"."EFFSEQ"= ( 
    SELECT MAX("INNERALIAS"."EFFSEQ")
    FROM "PS_JOB" INNERALIAS 
    WHERE "INNERALIAS"."EMPL_RCD_NBR" = "PSJ"."EMPL_RCD_NBR"
    AND "INNERALIAS"."EMPLID" = "PSJ"."EMPLID"
    AND "INNERALIAS"."EFFDT" = "PSJ"."EFFDT")
AND
"PSJ"."EFFDT" = ( 
    SELECT MAX("INNERALIAS"."EFFDT")
    FROM "PS_JOB" INNERALIAS 
    WHERE "INNERALIAS"."EMPL_RCD_NBR" = "PSJ"."EMPL_RCD_NBR"
    AND "INNERALIAS"."EMPLID" = "PSJ"."EMPLID"
    AND "INNERALIAS"."EFFDT" <= SYSDATE))))) 
AND
("PSJ"."EMPLID" = "PSE"."EMPLID" ) AND ("PSJ"."EMPLID" = "PSP"."EMPLID" ) AND ("PSJ"."FILE_NBR" = "PSA"."FILE_NBR" ) AND ("PSJ"."PAYGROUP" = "PSA"."PAYGROUP" ) AND ("PSE"."EMPLID" = "PSP"."EMPLID" )
GROUP BY
"PSJ"."EMPLID", "PSP"."NAME"
) AS "Q1"

LEFT JOIN


(SELECT DISTINCT
SUM("PSA"."AL_HOURS") AS "YEAR_TO_DATE Gross Hours", "PSJ"."EMPLID"
FROM
"PS_JOB" "PSJ", "PS_EMPLOYMENT" "PSE", "PS_PERSONAL_DATA" "PSP", "PS_AL_CHK_HRS_ERN" "PSA"
WHERE
((("PSA"."CHECK_DT" BETWEEN TO_DATE('2011-01-01', 'YYYY-MM-DD') AND TO_DATE('2011-11-01', 'YYYY-MM-DD'))  AND
("PSJ"."PAYGROUP" = 'SK2') AND
(("PSJ"."EFFSEQ"= ( 
    SELECT MAX("INNERALIAS"."EFFSEQ")
    FROM "PS_JOB" INNERALIAS 
    WHERE "INNERALIAS"."EMPL_RCD_NBR" = "PSJ"."EMPL_RCD_NBR"
    AND "INNERALIAS"."EMPLID" = "PSJ"."EMPLID"
    AND "INNERALIAS"."EFFDT" = "PSJ"."EFFDT")
AND
"PSJ"."EFFDT" = ( 
    SELECT MAX("INNERALIAS"."EFFDT")
    FROM "PS_JOB" INNERALIAS 
    WHERE "INNERALIAS"."EMPL_RCD_NBR" = "PSJ"."EMPL_RCD_NBR"
    AND "INNERALIAS"."EMPLID" = "PSJ"."EMPLID"
    AND "INNERALIAS"."EFFDT" <= SYSDATE))))) 
AND
("PSJ"."EMPLID" = "PSE"."EMPLID" ) AND ("PSJ"."EMPLID" = "PSP"."EMPLID" ) AND ("PSJ"."FILE_NBR" = "PSA"."FILE_NBR" ) AND ("PSJ"."PAYGROUP" = "PSA"."PAYGROUP" ) AND ("PSE"."EMPLID" = "PSP"."EMPLID" )
GROUP BY
"PSJ"."EMPLID"
) AS "Q2"
 ON "Q1"."EMPLID"="Q2"."EMPLID"
ORDER BY
"Q1"."NAME"

1 Ответ

5 голосов
/ 16 ноября 2011

Вам не хватает SELECT ... FROM в начале. Ключевое слово AS работает только при создании псевдонимов столбцов, а не псевдонимов блоков запросов. Кавычки необходимы только для чувствительных к регистру имен столбцов - они не выглядят некорректно в вашем примере, но часто вызывают ошибки.

SELECT Q1.NAME, ...
FROM
(
     SELECT ...
) Q1
JOIN
(
     SELECT ...
) Q2
ON Q1.EMPLID=Q2.EMPLID
ORDER BY Q1.NAME
...