2010-03-04 14 views
6

J'essaye d'UNION les résultats de deux requêtes. Mais je reçois l'erreur suivante:UNION sur deux select donne 'Erreur SQL: ORA-00907: parenthèse droite manquante'

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

Voilà ma question:

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

Il semble, il n'y a pas incompatibilité de parenthèses. – Kangkan

Répondre

11

Retirez le ORDER BY des requêtes imbriquées:

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: parce que 'Oracle' ne supporte pas' ORDER BY' dans les requêtes imbriquées. L'ordre résultant n'est pas garanti de toute façon. – Quassnoi

+0

POURQUOI ?! Je voulais combiner deux ensembles de résultats pré-ordonnés pour que l'ensemble A apparaisse au-dessus de l'ensemble B (au sens figuré). Mais je ne peux qu'appliquer ORDER BY pour l'ensemble A. Si j'essaie d'appliquer ORDER BY sur l'ensemble B, il est écrit 'parenthèse droite manquante'. Pourquoi est-il autorisé sur l'ensemble A alors? Comment puis-je commander les deux ensembles individuellement sans introduire de clé de commande pour effectuer la commande finale? – ADTC

+0

Peu importe, j'ai pensé que si vous imbriquez la requête comme 'SELECT * FROM (/ * set B requête avec ORDER BY * /)' vous pouvez avoir défini B, et il ne donnera pas l'erreur: D – ADTC