[英]ORACLE Query with ORDER BY and UNION
我有以下查詢,效果很好!
唯一的問題是我需要DESC Order中的結果集,並且我在查詢結尾處附加的以下ORDER BY子句會生成以下Oracle錯誤:
ORA-00933:SQL命令未正確結束00933. 00000 - “SQL命令未正確結束”*原因:
*動作:行錯誤:46列:54
這是查詢。 同樣,此查詢有效。 只是當我添加以下行時:
FINAL_SEARCH order by FINAL_SEARCH.DOC_HDR_ID desc
一切都破裂了。
有任何想法嗎? 我相信我的ALIAS與它有關,但我可能是錯的。
查詢 -
Select * from ( select DISTINCT(DOC_HDR.DOC_HDR_ID),
DOC_HDR.INITR_PRNCPL_ID,
DOC_HDR.DOC_HDR_STAT_CD,
DOC_HDR.CRTE_DT,
DOC_HDR.TTL,
DOC_HDR.APP_DOC_STAT,
DOC1.DOC_TYP_NM,
DOC1.LBL, DOC1.DOC_HDLR_URL,
DOC1.ACTV_IND
from KREW_DOC_TYP_T DOC1, KREW_DOC_HDR_T DOC_HDR
where DOC_HDR.INITR_PRNCPL_ID IN ( '10000000001' ) and
( DOC1.DOC_TYP_NM = 'PO' or
DOC1.DOC_TYP_NM = 'POA' or
DOC1.DOC_TYP_NM = 'POC' or
DOC1.DOC_TYP_NM= 'POPH' or
DOC1.DOC_TYP_NM ='PORH' or
DOC1.DOC_TYP_NM = 'POR' or
DOC1.DOC_TYP_NM = 'PORT' or
DOC1.DOC_TYP_NM = 'POSP' or
DOC1.DOC_TYP_NM = 'POV') and
DOC_HDR.DOC_HDR_STAT_CD!= 'I' and
DOC_HDR.DOC_TYP_ID = DOC1.DOC_TYP_ID )
UNION
Select DISTINCT DOC_HDR.DOC_HDR_ID,
DOC_HDR.INITR_PRNCPL_ID,
DOC_HDR.DOC_HDR_STAT_CD,
DOC_HDR.CRTE_DT,
DOC_HDR.TTL,
DOC_HDR.APP_DOC_STAT,
DOC1.DOC_TYP_NM,
DOC1.LBL,
DOC1.DOC_HDLR_URL,
DOC1.ACTV_IND
FROM KREW_DOC_TYP_T DOC1,
KREW_DOC_HDR_T DOC_HDR
WHERE DOC1.DOC_TYP_NM = 'PO' AND CAST(DOC_HDR.DOC_HDR_ID AS VARCHAR(14)) = ANY (
Select PPT.FDOC_NBR
FROM PUR_PO_T PPT, PL_PURCHASE_LOG_PO_T PPL
WHERE PPT.AP_PUR_DOC_LNK_ID = ANY (
Select PRT.AP_PUR_DOC_LNK_ID
FROM PUR_REQS_T PRT,
KREW_DOC_HDR_T DOC_HDR
WHERE CAST(DOC_HDR.DOC_HDR_ID AS VARCHAR(14)) = PRT.FDOC_NBR AND
DOC_HDR.INITR_PRNCPL_ID IN ( '10000000001' ) )) FINAL_SEARCH order by FINAL_SEARCH.DOC_HDR_ID desc;
更新 - 我刪除了ALIAS並在兩個查詢之后放置了'ORDER BY'語句,它在SQL Developer中工作; 但是,當我通過使用Java生成此查詢的Web應用程序執行此查詢時,我得到一個關於INVALID SYMBOL的ORACLE ERROR。 無效符號是一個分號,用於終止第一個ORDER BY語句。 它在SQL Developer中不起作用,但顯然當我執行通過Web App生成的相同語句時 - 它失敗了。
您需要計算括號 - 要聯合的兩個查詢應該在一個括號中 - 然后您的別名和SELECT * FROM將起作用。
SELECT *
FROM ( (SELECT DISTINCT (doc_hdr.doc_hdr_id),
doc_hdr.initr_prncpl_id,
doc_hdr.doc_hdr_stat_cd,
doc_hdr.crte_dt,
doc_hdr.ttl,
doc_hdr.app_doc_stat,
doc1.doc_typ_nm,
doc1.lbl,
doc1.doc_hdlr_url,
doc1.actv_ind
FROM krew_doc_typ_t doc1, krew_doc_hdr_t doc_hdr
WHERE doc_hdr.initr_prncpl_id IN ('10000000001')
AND (doc1.doc_typ_nm = 'PO'
OR doc1.doc_typ_nm = 'POA'
OR doc1.doc_typ_nm = 'POC'
OR doc1.doc_typ_nm = 'POPH'
OR doc1.doc_typ_nm = 'PORH'
OR doc1.doc_typ_nm = 'POR'
OR doc1.doc_typ_nm = 'PORT'
OR doc1.doc_typ_nm = 'POSP'
OR doc1.doc_typ_nm = 'POV')
AND doc_hdr.doc_hdr_stat_cd != 'I'
AND doc_hdr.doc_typ_id = doc1.doc_typ_id)
UNION
SELECT DISTINCT doc_hdr.doc_hdr_id,
doc_hdr.initr_prncpl_id,
doc_hdr.doc_hdr_stat_cd,
doc_hdr.crte_dt,
doc_hdr.ttl,
doc_hdr.app_doc_stat,
doc1.doc_typ_nm,
doc1.lbl,
doc1.doc_hdlr_url,
doc1.actv_ind
FROM krew_doc_typ_t doc1, krew_doc_hdr_t doc_hdr
WHERE doc1.doc_typ_nm = 'PO'
AND CAST (doc_hdr.doc_hdr_id AS VARCHAR (14)) =
ANY (SELECT ppt.fdoc_nbr
FROM pur_po_t ppt, pl_purchase_log_po_t ppl
WHERE ppt.ap_pur_doc_lnk_id =
ANY (SELECT prt.ap_pur_doc_lnk_id
FROM pur_reqs_t prt,
krew_doc_hdr_t doc_hdr
WHERE CAST (
doc_hdr.doc_hdr_id AS VARCHAR (14)
) = prt.fdoc_nbr
AND doc_hdr.initr_prncpl_id IN
('10000000001'))))
final_search
ORDER BY final_search.doc_hdr_id DESC;
我認為你正在使用一個額外的支架')'
Select * from ( select DISTINCT(DOC_HDR.DOC_HDR_ID),
DOC_HDR.INITR_PRNCPL_ID,
DOC_HDR.DOC_HDR_STAT_CD,
DOC_HDR.CRTE_DT,
DOC_HDR.TTL,
DOC_HDR.APP_DOC_STAT,
DOC1.DOC_TYP_NM,
DOC1.LBL, DOC1.DOC_HDLR_URL,
DOC1.ACTV_IND
from KREW_DOC_TYP_T DOC1, KREW_DOC_HDR_T DOC_HDR
where DOC_HDR.INITR_PRNCPL_ID IN ( '10000000001' ) and
( DOC1.DOC_TYP_NM = 'PO' or
DOC1.DOC_TYP_NM = 'POA' or
DOC1.DOC_TYP_NM = 'POC' or
DOC1.DOC_TYP_NM= 'POPH' or
DOC1.DOC_TYP_NM ='PORH' or
DOC1.DOC_TYP_NM = 'POR' or
DOC1.DOC_TYP_NM = 'PORT' or
DOC1.DOC_TYP_NM = 'POSP' or
DOC1.DOC_TYP_NM = 'POV') and
DOC_HDR.DOC_HDR_STAT_CD!= 'I' and
DOC_HDR.DOC_TYP_ID = DOC1.DOC_TYP_ID
UNION
Select DISTINCT DOC_HDR.DOC_HDR_ID,
DOC_HDR.INITR_PRNCPL_ID,
DOC_HDR.DOC_HDR_STAT_CD,
DOC_HDR.CRTE_DT,
DOC_HDR.TTL,
DOC_HDR.APP_DOC_STAT,
DOC1.DOC_TYP_NM,
DOC1.LBL,
DOC1.DOC_HDLR_URL,
DOC1.ACTV_IND
FROM KREW_DOC_TYP_T DOC1,
KREW_DOC_HDR_T DOC_HDR
WHERE DOC1.DOC_TYP_NM = 'PO' AND CAST(DOC_HDR.DOC_HDR_ID AS VARCHAR(14)) = ANY (
Select PPT.FDOC_NBR
FROM PUR_PO_T PPT, PL_PURCHASE_LOG_PO_T PPL
WHERE PPT.AP_PUR_DOC_LNK_ID = ANY (
Select PRT.AP_PUR_DOC_LNK_ID
FROM PUR_REQS_T PRT,
KREW_DOC_HDR_T DOC_HDR
WHERE CAST(DOC_HDR.DOC_HDR_ID AS VARCHAR(14)) = PRT.FDOC_NBR AND
DOC_HDR.INITR_PRNCPL_ID IN ( '10000000001' ) ))) FINAL_SEARCH order by FINAL_SEARCH.DOC_HDR_ID desc;
首先刪除條件中的最后一個括號,然后嘗試。 另外在最后添加一個括號) FINAL_SEARCH order by
你忘記了一些括號:
Select * from ( select DISTINCT(DOC_HDR.DOC_HDR_ID),
DOC_HDR.INITR_PRNCPL_ID,
DOC_HDR.DOC_HDR_STAT_CD,
DOC_HDR.CRTE_DT,
DOC_HDR.TTL,
DOC_HDR.APP_DOC_STAT,
DOC1.DOC_TYP_NM,
DOC1.LBL, DOC1.DOC_HDLR_URL,
DOC1.ACTV_IND
from KREW_DOC_TYP_T DOC1, KREW_DOC_HDR_T DOC_HDR
where DOC_HDR.INITR_PRNCPL_ID IN ( '10000000001' ) and
( DOC1.DOC_TYP_NM = 'PO' or
DOC1.DOC_TYP_NM = 'POA' or
DOC1.DOC_TYP_NM = 'POC' or
DOC1.DOC_TYP_NM= 'POPH' or
DOC1.DOC_TYP_NM ='PORH' or
DOC1.DOC_TYP_NM = 'POR' or
DOC1.DOC_TYP_NM = 'PORT' or
DOC1.DOC_TYP_NM = 'POSP' or
DOC1.DOC_TYP_NM = 'POV') and
DOC_HDR.DOC_HDR_STAT_CD!= 'I' and
DOC_HDR.DOC_TYP_ID = DOC1.DOC_TYP_ID )
UNION
(Select DISTINCT DOC_HDR.DOC_HDR_ID,
DOC_HDR.INITR_PRNCPL_ID,
DOC_HDR.DOC_HDR_STAT_CD,
DOC_HDR.CRTE_DT,
DOC_HDR.TTL,
DOC_HDR.APP_DOC_STAT,
DOC1.DOC_TYP_NM,
DOC1.LBL,
DOC1.DOC_HDLR_URL,
DOC1.ACTV_IND
FROM KREW_DOC_TYP_T DOC1,
KREW_DOC_HDR_T DOC_HDR
WHERE DOC1.DOC_TYP_NM = 'PO' AND CAST(DOC_HDR.DOC_HDR_ID AS VARCHAR(14)) = ANY (
Select PPT.FDOC_NBR
FROM PUR_PO_T PPT, PL_PURCHASE_LOG_PO_T PPL
WHERE PPT.AP_PUR_DOC_LNK_ID = ANY (
Select PRT.AP_PUR_DOC_LNK_ID
FROM PUR_REQS_T PRT,
KREW_DOC_HDR_T DOC_HDR
WHERE CAST(DOC_HDR.DOC_HDR_ID AS VARCHAR(14)) = PRT.FDOC_NBR AND
DOC_HDR.INITR_PRNCPL_ID IN ( '10000000001' ) ))) FINAL_SEARCH order by FINAL_SEARCH.DOC_HDR_ID desc;
去掉 ”;” 用於填充數據集/數據表的Web應用程序中的符號。
您還可以按塊順序使用列順序作為別名,例如:
選擇.....訂購1 asc,4 desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.