2016-08-23 2 views
1

多くのデータが移行されましたが、現在はそれらが正しいかどうかチェックしたいと考えています。移行後のデータを分析するためのSQL

以下は簡単な例です。 すでに別のテーブルに入力されているテーブルを移行しました。 今、両方のテーブルの数を確認して比較したいと思います。つの結果として

SELECT 'Prüfung1' AS "Prüfung", (CASE 
    WHEN (SELECT count(*) FROM TableA) = (SELECT count(*) FROM TableB) 
    THEN 'OK!' 
    ELSE '!!! Anzahl stimmt nicht überein !!!' END) "Ergebnis" FROM dual 

しかし、私はそのようないくつかのテストを実施するだろう、とショー: はまた、私は次のクエリを作成しました。私が2番目のテストで置き換えられる場合、これは行ではなく列として表示されます。

SELECT * FROM (
    SELECT 'Prüfung1' AS "Prüfung", (CASE 
    WHEN (SELECT count(*) FROM TableA) = (SELECT count(*) FROM TableB) 
    THEN 'OK!' 
    ELSE '!!! Anzahl stimmt nicht überein !!!' END) "Ergebnis" FROM dual) check1, 
    (
    SELECT 'Prüfung2' AS "Prüfung", (CASE 
    WHEN (SELECT count(*) FROM TableC) = (SELECT count(*) FROM TableD) 
    THEN 'OK!' 
    ELSE '!!! Anzahl stimmt nicht überein !!!' END) "Ergebnis" FROM dual) check2; 

私の結果は次のようになります。

 
|Tests|Result| 
|Check1|Result1| 
|Check2|Result2| 
|Check3|Result3| 
... 

にはどうすれば最善のことを行うことができますか?

私のenglsihに申し訳ありません! ;-)

ここ@vercelli

の更新ORA-00904エラーを持つクエリ:私は彼らのtableNameですべてのテーブルのcount(*)でサブクエリを作成したい

with myTables as (select 'tableA' as tableName, count(*) as howMany from MIGRATION_OLDTABLE1 union all 
       select 'tableB' as tableName, count(*) as howMany from OLDTABLE1 union all 
       select 'tableC' as tableName, count(*) as howMany from MIGRATION_OLDTABLE2 union all 
       select 'tableD' as tableName, count(*) as howMany from OLDTABLE2 
       --.... 
       --select 'tableN' as tableName, count(*) from TableC 
      ), 
myRelations (select 'tableA' as newTable, 'tableB' as oldtable from dual union all 
      select 'tableC' as newTable, 'tableD' as oldtable from dual) 
select DECODE(a1.howMany, a2.howMany, 'OK', 'KO') as results , r.newTable ||' : ' || to_char(a1.howMany) ||' vs. '|| r.oldTable || ' : ' || to_char(a2.howMany) diff 
from myTables a1 join myRelations r on a1.tableName = r.newTable 
       join myTables a2 on a2.tableName = r.oldTable; 
+0

私はあなたが本当に結果として何をしたいかわかりません。行数が異なるテーブルだけ?または異なる値を持つ行ですか?あなたの質問を編集して、そのデータに基づいてサンプルデータと予想される出力を加えてください。 _Formatted_ text please、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-質問/ 285557#285557) –

+0

'all union 'を使用してください。 –

答えて

0

。 すべての関係を持つ別のサブクエリ(newTableoldTable) 次に、それらを結合し、count(*)を比較してください。

with myTables as (select 'tableA' as tableName, count(*) as howMany from tableA union all 
        select 'tableB' as tableName, count(*) as howMany from tableB union all 
        .... 
        select 'tableN' as tableName, count(*) from tableN), 
    myRelations as (select 'tableA' as newTable, 'tableB' as oldtable from dual union all 
       select 'tableC' as newTable, 'tableD' as oldtable from dual) 
select DECODE(a1.howMany, a2.howMany, 'OK', 'KO') as results , r.newTable ||' : ' || to_char(a1.howMany) ||' vs. '|| r.oldTable || ' : ' || to_char(a2.howMany) diff 
    from myTables a1 join myRelations r on a1.tableName = r.newTable 
        join myTables a2 on a2.tableName = r.oldTable 
    ; 

サンプル出力

results diff 
    KO tableA : 5624 vs. tableB: 5476 
    OK tableC : 1576 vs. tableD: 1576 
+0

ORA-00904エラーが発生しました。 –

+0

無効な識別子ですか?あなたの質問を投稿してください。 – vercelli

+0

多分私はtableNを誤解します。表CとDはどこに置かれるのですか? –

関連する問題