这是我的SQL:
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
;
当我在第一个SQL的ORDER BY F9_OA008_DT和第二个sql的ORDER BY F9_IB006_DT中添加时,它会遇到错误。为什么? 错误消息是: ORA-00923:找不到FROM关键字。
答案 0 :(得分:1)
在SQL语句中只应该有一个order by子句。
select col1, col2 from tab1
union all
select col3, col4 from tab2
order by 1, 2
注意:“union”执行隐式的(因此需要在封面下进行排序)。如果您不需要不同的值,请使用“union all”。您可以使用上面的序数来按列的顺序排列
答案 1 :(得分:0)
也许你应该为字段放置相同的ALIAS,比如说Field1,然后在整个SQL中使用ORDER BY来表示ORDER BY Field1,而不是为每个子查询分开ORDER BY。
答案 2 :(得分:0)
只有在两个sql语句中都使用这两个字段时,才可以在查询中对F9_OA008_DT和F9_IB006_DT字段应用order by子句。
但是在你的情况下你的两个sql加入了这两个字段。
您可以在第一个sql语句中添加虚拟字段F9_IB006_DT,在第二个sql语句中添加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
;