0

これが私の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 
;

1つ目のSQLに ORDER BY F9_OA008_DT 、2つ目のSQLに ORDER BY F9_IB006_DT を追加するとエラーになります。なんで ?エラー メッセージ: ORA-00923: FROM キーワードが予期された場所に見つかりません。

4

3 に答える 3

1

SQL ステートメントには order by 句を 1 つだけ含める必要があります。

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

注: "union" は、暗黙の識別を行います (したがって、裏でソートが必要です)。個別の値が必要ない場合は、「union all」を使用してください。上記のように序数を使用して、列を位​​置順に並べ替えることができます

于 2012-05-07T08:40:20.923 に答える
0

おそらく、Field1 などのフィールドに同じ ALIAS を配置し、SQL 全体で ORDER BY を使用して、サブクエリごとに個別の ORDER BY ではなく、ORDER BY Field1 のようなものを使用する必要があります。

于 2012-05-07T08:16:40.763 に答える
0

これらの 2 つのフィールドが両方の SQL ステートメントで使用されている場合にのみ、クエリの F9_OA008_DT および F9_IB006_DT フィールドに order by 句を適用できます。

しかし、あなたの場合、ユニオンで結合された両方のSQLにこれらのフィールドがありません。

以下のサンプルのように、最初の SQL ステートメントにダミー フィールド F9_IB006_DT を追加し、2 番目の 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
;
于 2012-05-07T09:06:53.120 に答える