0

毎日 200 のトラフィック ステーションからデータを取得していますが、すべてのステーションは (KGM_000000000001_PVR) のような異なるテーブル名を持っています。すべてのステーションには、同じ列名で同じ列の並べ替えがあります。常に異なるウィッシュのレポートを取得し、以下の例に示すようにステーションをすべてユニオンと組み合わせます。常にユニオンオールでそれらを組み合わせていますが、少し難しいです。このようなレポートを取得する他の簡単な方法はありますか (ループ、ケース、for などを使用)。

レベント

ありがとう

レポートのコード例:


SELECT count(class) from C2.KGM_000000000001_PVR WHERE class=9 and RECTIME BETWEEN TO_DATE('01.01.2012','DD.MM.YYYY') AND TO_DATE('01.01.2013','DD.MM.YYYY')
union all
SELECT count(class) from C2.KGM_000000000002_PVR WHERE class=9 and RECTIME BETWEEN TO_DATE('01.01.2012','DD.MM.YYYY') AND TO_DATE('01.01.2013','DD.MM.YYYY')
union all
SELECT count(class) from C2.KGM_000000000003_PVR WHERE class=9 and RECTIME BETWEEN TO_DATE('01.01.2012','DD.MM.YYYY') AND TO_DATE('01.01.2013','DD.MM.YYYY')
union all
.
.
.
SELECT count(class) from C2.KGM_000000000200_PVR WHERE class=9 and RECTIME BETWEEN TO_DATE('01.01.2012','DD.MM.YYYY') AND TO_DATE('01.01.2013','DD.MM.YYYY')
4

3 に答える 3

3

テーブル名を示す疑似列「SOURCE」を使用して、これらすべてのテーブルにビューを作成することをお勧めします。次に、クライアントコードは、必要な[ソース]列を選択して、この1つのビューをクエリできます。

CREATE VIEW KGM_ALL AS
SELECT 'KGM_000000000001_PVR' AS SOURCE, * FROM C2.KGM_000000000001_PVR
UNION ALL
SELECT 'KGM_000000000002_PVR' AS SOURCE, * FROM C2.KGM_000000000002_PVR
....

SELECT * from KGM_ALL where SOURCE in ('KGM_000000000001_PVR', ...)

@Marlinが述べたように、ソースと通常選択する他の列にインデックスを作成することを忘れないでください。

于 2013-01-22T15:04:47.997 に答える
0

おそらく、動的 SQL を使用できます。

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm

次に、次のように (where 句で数字を使用する代わりに) 名前を連結することにより、テーブルを反復処理できるようにする必要があります。

pl/sql で数値を超えるループを記述する方法

于 2013-01-22T15:44:22.167 に答える
0

各テーブルのフィールド (クラス、RECTIME) のインデックスにより、時間が短縮されます。指定された順序で 1 つのインデックスに両方のフィールドを必ず含めてください。

于 2013-01-22T14:53:39.700 に答える