1

Cognos レポート スタジオの列「id」で 2 つのテーブル A と B で完全外部結合を実行しています。両方のテーブルには、id 列の複数のレコードがあります。私の要件は、各テーブルのレコード数を数えてグラフに表示する必要があることです。しかし、レコードを数えると、レコードが乗算され、デカルト積になります。

A.id ----   B.id  
1 ------ 1  
2 ------ 2  
2 ------ 2  
3 ------ 4  
4 ------ 5  
5 ------ 6

カウントを行うと、これが得られます。

A.id ----   B.id ----  Count(A.id)----   Count(B.id)  
1  ----     1   ----     1    ----       1  
2 ----      2  ----      4  ----         4    (Am expecting 2 for these kind of records)  
3  ----      null ---- 1 ---- null  
4 ----      4 ----       1----           1          
5 ----      5  ----      1 ----          1   
null ----        6 ----  null  ----               1  

テーブル A とテーブル B の合計レコード数をグラフで表示する必要があります。これは外積になるため、グラフの値は正しい結果を示していません.2番目のレコードでこのデカルト積を回避する方法を提案できますか? これが可能かどうか提案してください。

4

2 に答える 2

0

一意ではない列に結合しているため、左側の特定の値の各インスタンスが右側のその値のすべてのインスタンスと一致することになります。

テーブル A が次のようになっているとします。

ここに画像の説明を入力

...テーブル B は次のようになります。

ここに画像の説明を入力

ID で 2 つのテーブルを完全に外部結合すると、次のようになります。

ここに画像の説明を入力

すべての組み合わせを表す必要があります。これが、カウントごとに 4 が表示されている理由です。自動グループ化と集計の前に、結果として 4 つの行があります。

結合から派生したクエリに追加された集計は、結合が行われた後に結果の行でのみ計算できます。ある意味では、個々のクエリの詳細は隠されているため、カウントできません。

このような結合で SQL を生成すると、Cognos がこれを実行したことがよくわかります。

SELECT a.column1, a.column2, b.column1. b.column2 
FROM (
    SELECT column1, column2 
    FROM tableA
    ) a FULL OUTER JOIN
    (
    SELECT column1, column2
    FROM tableB
    ) b ON a.column1 = b.column1

上位レベルのクエリのカウントは外部選択に追加されますが、外部選択は A からの行数と B からの行数を知る方法がありません。結合の結果の行しかカウントできません。

私が考えることができる唯一の解決策は、個々のクエリ レベルでカウントを行い、結合されたクエリにプルアップすることです。

于 2015-10-06T17:38:31.380 に答える
0

カウントを個別に表示する必要がある場合は、2 つのテーブルのユニオンとカウント ID を個別に使用します。

于 2015-10-04T09:24:33.363 に答える