2010-06-10 4 views
1

Comment puis-je utiliser END_DATE/START_DATE à partir du premier sous-select de la seconde sous-sélection?, Les valeurs fournies ne sont que des exemples. (06/01/2010).Clause SQL Where dans ORACLE

SELECT "PROJECT"."ID", 
     "PROJECT"."CLIENT", 
     "PROJECT"."NAME", 
     "PROJECT"."STATE", 
     "PROJECT"."EARLIEST_START", 
     "PROJECT"."LATEST_END", 
     "PROJECT"."EFFORT", 
     "PROJECT"."LINK", 
     "PROJECT"."STATUS", 
     "PROJECT"."DESCRIPTION", 
     (SELECT SUM((END_DATE - START_DATE + 1) * (WORKLOAD/100)) 
      FROM WORKITEM WHERE PROJECT = PROJECT.ID 
     ) AS "P_A", 
     (SELECT COUNT(*) 
      FROM PUBLIC_HOLIDAY 
      WHERE HOLIDAY_DATE BETWEEN TO_DATE('06/1/2010','MM/DD/YYYY') AND 
            TO_DATE('06/2/2010','MM/DD/YYYY')) AS P_B, 
     "PROJECT_STATE"."STATE", 
     "PERSON"."DISPLAY_NAME" AS "RESPONSIBLE" 
     FROM "PROJECT" 
     INNER JOIN "PROJECT_STATE" ON PROJECT.STATE = PROJECT_STATE.ID 
     INNER JOIN "PERSON" ON RESPONSIBLE = PERSON.ID 
     WHERE (PROJECT.CLIENT = '1') AND (PROJECT.STATE = 1) 
     ORDER BY "PROJECT"."NAME" ASC 
+2

Je ne suis pas sûr de ce que vous demandez - s'il vous plaît clarifier la question. –

+0

désolé difficile à expliquer, espérons que cela aide .. – opHASnoNAME

+0

Désolé difficile de répondre :-). Sérieusement, essayez à nouveau de formuler une phrase qui se termine par un point d'interrogation. Et veuillez inclure une instruction create table et insert avec des exemples de données et la sortie attendue. –

Répondre

0

Vous ne pouvez pas. Vous pouvez créer un seul sous-ensemble à partir des deux en utilisant une jointure et déplacer le nouveau sous-élément composite de la partie SELECT vers la partie FROM de la requête principale.

0

Est-ce que vous cherchez

SELECT "PROJECT"."ID", 
     "PROJECT"."CLIENT", 
     "PROJECT"."NAME", 
     "PROJECT"."STATE", 
     "PROJECT"."EARLIEST_START", 
     "PROJECT"."LATEST_END", 
     "PROJECT"."EFFORT", 
     "PROJECT"."LINK", 
     "PROJECT"."STATUS", 
     "PROJECT"."DESCRIPTION", 
     (SELECT SUM((END_DATE - START_DATE + 1) * (WORKLOAD/100)) 
      FROM WORKITEM WHERE PROJECT = PROJECT.ID 
     ) AS "P_A", 
     (SELECT COUNT(*) 
      FROM PUBLIC_HOLIDAY 
      WHERE HOLIDAY_DATE BETWEEN NVL(END_DATE,SYSDATE) AND 
            NVL(START_DATE,SYSDATE)) AS P_B, 
     "PROJECT_STATE"."STATE", 
     "PERSON"."DISPLAY_NAME" AS "RESPONSIBLE" 
     FROM "PROJECT" 
     INNER JOIN "PROJECT_STATE" ON PROJECT.STATE = PROJECT_STATE.ID 
     INNER JOIN "PERSON" ON RESPONSIBLE = PERSON.ID 
     LEFT JOIN "WORKITEM" ON WORKITEM.PROJECT = WORKITEM.ID 
     WHERE (PROJECT.CLIENT = '1') AND (PROJECT.STATE = 1) 
     ORDER BY "PROJECT"."NAME" ASC 
1

Voici une façon d'utiliser start_date et date_fin dans plus d'un endroit

with (select to_date('06/01/2010','MM/DD/YYYY') as start_date, 
      to_date('06/02/2010','MM/DD/YYYY') as end_date 
     from dual) as q1 
select project.id, 
     project_state.state, 
     q1.start_date, 
     q1.end_date, 
     (SELECT SUM((q1.END_DATE - q1.START_DATE + 1) * (WORKLOAD/100)) 
     FROM WORKITEM WHERE PROJECT = PROJECT.ID) AS P_A 
from project 
join project_state on project_state.id = project.state 
join q1 on 1=1