2010-03-04 7 views
6

Ich versuche UNION die Ergebnisse von zwei Abfragen. Aber ich bin immer folgende Fehlermeldung:UNION bei zwei Auswahl gibt 'SQL-Fehler: ORA-00907: fehlende rechte Klammer'

Error at Command Line:9 Column:81 
Error report: 
SQL Error: ORA-00907: missing right parenthesis 
00907. 00000 - "missing right parenthesis" 

Hier ist meine Frage:

SELECT application_id, clicks, datee, client_id FROM(
(select 
    APPL_CD AS application_id, 
    count(*) as clicks, 
    to_date((to_char(ACTN_TAKE_DATA_TM, 'dd-mm-yyyy')), 'dd-mm-yyyy') as datee, 
    ALRT_RSPNS_FROM_CLIENT_ID AS client_id 
from ALRT_PLATFORM_ALRT_HSTRY 
    where ACTN_TAKE_CD is not null 
    group by to_char(ACTN_TAKE_DATA_TM, 'dd-mm-yyyy'), APPL_CD, ALRT_RSPNS_FROM_CLIENT_ID order by datee) 
UNION ALL 
(select 
    APPL_CD AS application_id, 
    count(*) as clicks, 
    to_date((to_char(ACTN_TAKE_DATA_TM, 'dd-mm-yyyy')), 'dd-mm-yyyy') as datee, 
    ALRT_RSPNS_FROM_CLIENT_ID AS client_id 
from ALRT_PLATFORM_ALRT 
    where ACTN_TAKE_CD is not null 
    group by to_char(ACTN_TAKE_DATA_TM, 'dd-mm-yyyy'), APPL_CD, ALRT_RSPNS_FROM_CLIENT_ID order by datee) 
) 
+0

Es scheint, gibt es keine Klammer stimmen nicht überein. – Kangkan

Antwort

11

die ORDER BY aus den verschachtelten Abfragen entfernen:

SELECT application_id, clicks, datee, client_id FROM(
(select 
    APPL_CD AS application_id, 
    count(*) as clicks, 
    to_date((to_char(ACTN_TAKE_DATA_TM, 'dd-mm-yyyy')), 'dd-mm-yyyy') as datee, 
    ALRT_RSPNS_FROM_CLIENT_ID AS client_id 
from ALRT_PLATFORM_ALRT_HSTRY 
    where ACTN_TAKE_CD is not null 
    group by to_char(ACTN_TAKE_DATA_TM, 'dd-mm-yyyy'), APPL_CD, ALRT_RSPNS_FROM_CLIENT_ID) 
UNION ALL 
(select 
    APPL_CD AS application_id, 
    count(*) as clicks, 
    to_date((to_char(ACTN_TAKE_DATA_TM, 'dd-mm-yyyy')), 'dd-mm-yyyy') as datee, 
    ALRT_RSPNS_FROM_CLIENT_ID AS client_id 
from ALRT_PLATFORM_ALRT 
    where ACTN_TAKE_CD is not null 
    group by to_char(ACTN_TAKE_DATA_TM, 'dd-mm-yyyy'), APPL_CD, ALRT_RSPNS_FROM_CLIENT_ID) 
) 
+0

@ cedar715: weil 'Oracle'' ORDER BY' in den verschachtelten Abfragen nicht unterstützt. Die resultierende Reihenfolge ist nicht garantiert. – Quassnoi

+0

WARUM ?! Ich wollte zwei vorbestellte Ergebnisse so kombinieren, dass Satz A oberhalb von Satz B erscheint (im übertragenen Sinne). Aber ich kann nur ORDER BY für Satz A anwenden. Wenn ich versuche, ORDER BY auf Satz B anzuwenden, heißt es "fehlende rechte Klammer". Warum ist es dann am Set A erlaubt? Wie kann ich beide Sets einzeln bestellen lassen, ohne einen Bestellschlüssel einzugeben, mit dem Sie die letzte Bestellung vornehmen können? – ADTC

+0

Es macht nichts, dachte ich, wenn Sie die Abfrage verschachteln wie 'SELECT * FROM (/ * set B Query mit ORDER BY * /)' Sie können B bestellt haben, und es wird nicht den Fehler geben: D – ADTC