2012-05-07 41 views
0

這裏是我的SQL:訂購命中錯誤時UNION

SELECT F9_OA008_DT||'|', 
DED2(PX_OA008_PAN,'a')||'|', 
F9_OA008_MCC||'|', 
FX_OA008_MERC_NAME||FX_OA008_MERC_FILLER1||FX_OA008_MERC_CTY||FX_OA008_MERC_FILLER2||FX_OA008_MERC_ST_CNTRY||'|', 
F9_OA008_AMT_REQ 
FROM OA008 
WHERE F9_OA008_MCC=5542 AND F9_OA008_DT >= 20120501 
UNION 
SELECT F9_IB006_DT||'|', 
DED2(PX_IB006_PAN,'a')||'|', 
F9_IB006_MCC||'|', 
FX_IB006_CRD_ACCPT_NAL||'|', 
F9_IB006_AMT_REQ 
FROM IB006 
WHERE F9_IB006_MCC=5542 AND F9_IB006_DT >= 20120501 
; 

當我在ORDER BY添加爲F9_OA008_DT一號SQL和ORDER BY F9_IB006_DT的第二SQL,它會擊中錯誤。爲什麼? 錯誤消息是: ORA-00923:在預期的位置找不到FROM關鍵字。

+0

顯示與錯誤的查詢......你需要通過把順序每個查詢中的Where子句之後的子句。 – gdoron

+0

錯誤消息沒有意義的夥計。 – crchin

回答

1

你應該只在SQL語句中有一個order by子句。

select col1, col2 from tab1 
union all 
select col3, col4 from tab2 
order by 1, 2 

注:「聯合」做了一個隱式的區別(因此需要在下面進行分類)。如果你不需要不同的值,那麼使用「union all」。您可以使用上面的序號按其排序順序排列

0

也許你應該把相同的別名爲現場讓利說字段1,然後使用ORDER BY在整個SQL喜歡的東西ORDER BY字段1,而不是單獨的ORDER BY對每個子查詢..

0

只有在兩個sql語句中都使用這兩個字段時,纔可以在查詢中的F9_OA008_DT和F9_IB006_DT字段上應用order by子句。

但在你的情況下,你沒有這兩個字段都加入工會的sql。

您可以在第二個SQL語句的第一個SQL語句添加一個空場F9_IB006_DT和F9_OA008_DT如下樣品,然後嘗試:

SELECT F9_OA008_DT||'|', 
DED2(PX_OA008_PAN,'a')||'|', 
F9_OA008_MCC||'|', 
FX_OA008_MERC_NAME||FX_OA008_MERC_FILLER1||FX_OA008_MERC_CTY||FX_OA008_MERC_FILLER2||FX_OA008_MERC_ST_CNTRY||'|', 
F9_OA008_AMT_REQ,'' as F9_IB006_DT 
FROM OA008 
WHERE F9_OA008_MCC=5542 AND F9_OA008_DT >= 20120501 
UNION 
SELECT F9_IB006_DT||'|', 
DED2(PX_IB006_PAN,'a')||'|', 
F9_IB006_MCC||'|', 
FX_IB006_CRD_ACCPT_NAL||'|', 
F9_IB006_AMT_REQ, '' as F9_OA008_DT 
FROM IB006 
WHERE F9_IB006_MCC=5542 AND F9_IB006_DT >= 20120501 
order by F9_IB006_DT , F9_OA008_DT 
;