2012-04-18 68 views
0

這是我整個查詢如何通過外部查詢的表內查詢

SELECT empmst.emp_id, empmst.emp_name, 
     (SELECT RTRIM 
        (XMLAGG (XMLELEMENT (e, d || ',')).EXTRACT ('//text()').EXTRACT 
                    ('//text()'), 
        ',' 
        ) 
      FROM (SELECT TO_DATE ('01-04-2012', 'dd-MM-yyyy') - 1 
         + ROWNUM AS d 
        FROM all_objects 
        WHERE TO_DATE ('01-04-2012', 'dd-MM-yyyy') - 1 + ROWNUM <= 
              TO_DATE ('30-04-2012', 'dd-MM-yyyy') 
        MINUS 
        SELECT tsd.ts_date 
        FROM ts_dtl tsd 
        WHERE empmst.emp_id = tsd.emp_id 
        AND tsd.ts_date BETWEEN TO_DATE ('01-04-2012', 
                 'dd-MM-yyyy' 
                ) 
             AND TO_DATE ('30-04-2012', 
                 'dd-MM-yyyy' 
                ))) AS day11 
    FROM emp_mst empmst 
    WHERE TSD.EMP_ID=EMPMST.EMP_ID 
ORDER BY empmst.emp_id 

我想通過外部查詢到內查詢,但內層查詢的EMPMST.EMP_ID一點兒也不讓EMPMST.EMP_ID在where子句。 請告訴我如何將外部查詢從表格傳遞到內部查詢。 內部查詢是如下

(SELECT RTRIM 
      (XMLAGG (XMLELEMENT (e, d || ',')).EXTRACT ('//text()').EXTRACT 
                    ('//text()'), 
      ',' 
      ) 
    FROM (SELECT TO_DATE ('01-04-2012', 'dd-MM-yyyy') - 1 + ROWNUM AS d 
      FROM all_objects 
      WHERE TO_DATE ('01-04-2012', 'dd-MM-yyyy') - 1 + ROWNUM <= 
              TO_DATE ('30-04-2012', 'dd-MM-yyyy') 
     MINUS 
     SELECT tsd.ts_date 
      FROM emp_mst empmst, ts_dtl tsd 
      WHERE empmst.emp_id = tsd.emp_id 
      AND ts_date BETWEEN TO_DATE ('01-04-2012', 'dd-MM-yyyy') 
          AND TO_DATE ('30-04-2012', 'dd-MM-yyyy'))) 

我想EMP_NAME和EMP_ID和TS_date其中TS_DATE中不存在在四月TS_DTL意味着四月的天,這是不存在的TS_DTL表

+1

請張貼CREATE TABLE查詢,這樣我們就可以運行查詢 – bjan 2012-04-18 07:44:13

回答

0

其餘的請在下面找到其中將實現一些數據相同

SELECT EMPMST.EMP_ID, 
     EMPMST.EMP_NAME, 
     rtrim(xmlagg(xmlelement(e, b.d1 || ',')).extract('//text()') 
     .extract('//text()'), 
     ',') as day11 
    from (SELECT TO_DATE('01-04-2012', 'dd-MM-yyyy') - 1 + rownum AS d1 
     FROM all_objects 
    WHERE TO_DATE('01-04-2012', 'dd-MM-yyyy') - 1 + rownum <= 
      TO_DATE('30-04-2012', 'dd-MM-yyyy')) b, 
     EMP_MST EMPMST 
WHERE EMPMST.EMAIL_ID IS NOT NULL 
    AND EMPMST.DEPT IN ('Technical') 
    AND EMPMST.EMP_STATUS_LKP_ID = 201 
    AND b.d1 NOT IN 
     (SELECT TSD.TS_DATE as d2 
     FROM TS_DTL TSD 
    WHERE TSD.TS_DATE BETWEEN TO_DATE('01-04-2012', 'dd-MM-yyyy') AND 
      TO_DATE('30-04-2012', 'dd-MM-yyyy') 
     AND TSD.EMP_ID = EMPMST.EMP_ID) 
ORDER BY EMPMST.EMP_ID 
+0

謝謝您的答覆,但上面的查詢給了我所有b.d1值,而不是區別b。 d1和c.d2 – Edward 2012-04-18 09:50:31

+0

@愛德華我編輯了答案,現在請嘗試 – psaraj12 2012-04-18 11:24:11

+0

非常感謝,我在EMPMST.EMP_ID, EMPMST.EMP_NAME中添加了上述查詢中的組,並且其工作完美。 – Edward 2012-04-18 11:47:32