下面是我的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关键字。
发布于 2012-05-07 16:40:21
SQL语句中只能有一个order by子句。
select col1, col2 from tab1
union all
select col3, col4 from tab2
order by 1, 2注意:"union“执行隐式distinct (因此需要在幕后进行排序)。如果你不需要不同的值,那么使用"union all“。您可以像上面那样使用序号按列的位置顺序进行排序
发布于 2012-05-07 16:16:41
也许您应该为字段设置相同的别名,比如Field1,然后在整个Field1中使用ORDER BY,以便喜欢ORDER BY SQL,而不是为每个子查询单独使用ORDER BY。
发布于 2012-05-07 17:06:53
只有在查询中的F9_OA008_DT和F9_IB006_DT字段都使用这两个字段时,才能对这两个字段应用order by子句。
但是在您的例子中,您并没有在两个sql中使用union连接这些字段。
您可以在第一条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
;https://stackoverflow.com/questions/10478714
复制相似问题