2016-02-28 112 views
0

喜林試圖從一個子查詢子查詢出生日期相同主查詢出生日期讀取行甲骨文子查詢

的錯誤是

ORA-00904: "F"."HORA_INICIO": identificador no válido 
00904. 00000 - "%s: invalid identifier" 

這裏是我的代碼

SELECT F.FECHA, 
     COUNT(DISTINCT(F.CODIGO_DEPORTE)) AS CONTEODEPORTES, 
     C.CONTEO AS CONTEO, 
     CASE 
     WHEN C.CONTEO IS NULL THEN MIN(F.HORA_INICIO) 
     ELSE (SELECT * 
       FROM (SELECT (SELECT NOMBRE_DEPORTE 
           FROM DEPORTES 
           WHERE PP.CODIGO_DEPORTE=DEPORTES.CODIGO_DEPORTE) AS NOM 
         FROM PROGRAMACIONES PP 
         WHERE TO_CHAR(FECHA_INICIO, 'YYYY-MM-DD HH24:MI:SS') = 
           TO_CHAR(TO_DATE(F.FECHA,'DAY, DD "de" MONTH "de" YYYY'),'YYYY-MM-DD') 
            || ' ' || F.HORA_INICIO 
         ORDER BY NOM) 
       WHERE ROWNUM=1) 
     END AS PRIMER_DEPORTE 
    FROM FECHAS F 
    FULL OUTER JOIN CONTEO C 
    ON (F.FECHA=C.FECHA AND 
     F.HORA_INICIO=C.HORA_INICIO) 
    GROUP BY F.FECHA,C.CONTEO 
    ORDER BY TO_DATE(F.FECHA,'DAY, DD "de" MONTH "de" YYYY') 

我的問題是當試圖使用F.FECHA它沒有發現主要查詢

謝謝

+1

樣本數據和期望的結果將有助於解釋您正在嘗試做什麼。 –

+0

這些字段的類型是什麼:'FECHAS.FECHA'和'FECHAS.HORA_INICIO'和'PROGRAMACIONES.FECHA_INICIO'? –

+0

Fecha只是DATE字段的日期部分HORA_INICIO是DATE字段的時間部分,而FECHA_INICIO與fecha相同@JorgeCampos – slozano95

回答

0

你的問題是你的case語句子查詢。對於子查詢,Oracle不會在多個級別上理解F.FECHA字段,並且您有2個。既然您表示您的Oracle版本是12,則可能可以根據您的查詢對以下修改進行操作:

SELECT F.FECHA, 
     COUNT(DISTINCT(F.CODIGO_DEPORTE)) AS CONTEODEPORTES, 
     C.CONTEO AS CONTEO, 
     CASE 
     WHEN C.CONTEO IS NULL THEN MIN(F.HORA_INICIO) 
     ELSE ( SELECT NOMBRE_DEPORTE 
        FROM DEPORTES D 
          INNER JOIN PROGRAMACIONES PP 
           ON (D.CODIGO_DEPORTE = PP.CODIGO_DEPORTE) 
        WHERE TO_CHAR(PP.FECHA_INICIO, 'YYYY-MM-DD HH24:MI:SS') = 
         TO_CHAR(TO_DATE(F.FECHA, 
             'DAY, DD "de" MONTH "de" YYYY' 
             ), 
           'YYYY-MM-DD' 
           ) || ' ' || F.HORA_INICIO 
        ORDER BY PP.NOM 
        FETCH FIRST 1 ROW ONLY 
     ) END AS PRIMER_DEPORTE 
    FROM FECHAS F 
    FULL OUTER JOIN CONTEO C 
    ON (F.FECHA=C.FECHA AND 
     F.HORA_INICIO=C.HORA_INICIO) 
    GROUP BY F.FECHA,C.CONTEO 
    ORDER BY TO_DATE(F.FECHA,'DAY, DD "de" MONTH "de" YYYY') 

既然你沒有提供任何數據,所以我們可以看到你需要什麼,它是不可能給你什麼可以做的提示,使這個查詢更好。如果我們能理解數據,我相信它可以用更好的方式寫出來。

注意,我只是改變了你的查詢,以便在CASE語句子查詢只是一個級別,因此您將能夠達到F.FECHA裏面。

編輯

既然你是在Oracle 11g中,它不支持FETCH條款,這將是一個解決辦法。我已經將你的子查詢添加爲一個表格,並使用分析函數只獲取一行。

SELECT F.FECHA, 
     COUNT(DISTINCT(F.CODIGO_DEPORTE)) AS CONTEODEPORTES, 
     C.CONTEO AS CONTEO, 
     CASE 
     WHEN C.CONTEO IS NULL THEN MIN(F.HORA_INICIO) 
     ELSE (ND.NOMBRE_DEPORTE) END AS PRIMER_DEPORTE 
    FROM FECHAS F 
     FULL OUTER JOIN CONTEO C 
      ON ( F.FECHA=C.FECHA 
       AND F.HORA_INICIO=C.HORA_INICIO) 
     INNER JOIN (SELECT NOMBRE_DEPORTE, 
          TO_CHAR(PP.FECHA_INICIO, 'YYYY-MM-DD HH24:MI:SS') as FECHA_INICIO, 
          ROW_NUMBER() over (PARTITION by NOMBRE_DEPORTE, 
                TO_CHAR(PP.FECHA_INICIO, 'YYYY-MM-DD HH24:MI:SS') 
               ORDER BY PP.NOM) as RNUMBER 
         FROM DEPORTES D 
          INNER JOIN PROGRAMACIONES PP 
            ON (D.CODIGO_DEPORTE = PP.CODIGO_DEPORTE) 
        ) ND ON (ND.FECHA_INICIO = TO_CHAR(TO_DATE(F.FECHA, 
                   'DAY, DD "de" MONTH "de" YYYY'), 
                 'YYYY-MM-DD') || ' ' || F.HORA_INICIO 
           AND ND.RNUMBER = 1) 
    GROUP BY F.FECHA, C.CONTEO 
    ORDER BY TO_DATE(F.FECHA,'DAY, DD "de" MONTH "de" YYYY') 
+0

嗨,@ JorgeCampos現在它的說有一個右括號missin,但如果我刪除命令並獲取它在這裏工作的想法?謝謝! – slozano95

+0

我想'';'只是刪除它,它應該工作 –

+0

我已經試過,它一直說同樣 – slozano95