2010-03-04 16 views
6

İki sorgunun sonuçlarını UNION için deniyorum. Ama şu hatayı alıyorum:UNION iki seçimde 'SQL Hatası: ORA-00907: eksik doğru parantez'

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

İşte benim sorgu var:

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

, hiçbir parantez uyuşmazlığı yoktur. – Kangkan

cevap

11

iç içe sorgulardan ORDER BY kaldırın:

görünüyor
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: çünkü 'Oracle' iç içe geçmiş sorgularda 'SİPARİŞ BY'i desteklemiyor. Elde edilen sipariş zaten garanti edilmez. – Quassnoi

+0

NEDEN ?! Önceden belirlenmiş iki sonuç kümesini birleştirmek istedim, böylece A ayarı B kümesinin üstünde belirir (figüratif olarak). Ancak sadece set A için SİPARİŞ BY uygulayabiliyorum. Eğer B setinde SİPARİŞ BY uygulamam gerekiyorsa, 'doğru parantez eksik' diyor. O zaman neden A kümesine izin verilir? Son siparişi vermek için sipariş setini girmeden her iki seti de nasıl sipariş edebilirim? – ADTC

+0

Unutmayın, sorguyu "SELECT * FROM (/ * set B sorgusu ile SIPARIŞ BY * /)" gibi yuvaya yerleştirirseniz, B'nin sipariş vermesini ayarlayabileceğinizi ve hatayı vermeyeceğini düşündüm: D – ADTC

İlgili konular