2012-02-16 13 views
1

私は、2つのデータベースからデータを取得し、ユーザーによるサマリーを表示するレポートを用意しました。 各値を取得するために個々のデータセットを書きましたが、値が重複する可能性があるため、どのように各ユーザのすべてのレコードを取得できますか? 2つのデータベースサマリーSSRSレポートで異なるデータベースのデータセットを使用する問題

MainDataset

Select Count(*) as total, Username from database1 
where my condition... 
group by Username 
UNION ALL 
Select Count(*) as total, Username from database2 
where my condition... 
group by Username 

Username Total 
User1  2 
User2  1 
User3  3 
User4  4 
User5  10 
User6  5 

データセット2

Select Count(*) as totalCol2, Username from database1 
where condition for this column... 
group by Username 
UNION ALL 
Select Count(*) as totalCol2, Username from database2 
where condition for this column... 
group by Username 

Username totalCol2 
User1  2 
User2  1 
User2  1 
User3  3 
User3  2 
User4  1 
User5  2 
User5  3 
User6  4 
からのデータ

Username Total totalCol2 
User1  2 2 
User2  1 2 
User3  3 5 
User4  4 1 
User5  10 5 
User6  5 4 

私は、ルックアップを使用しようとしただけDATASET2から最初の一致を得、sum関数:私は私のレポートで行を表示するMainDatasetを使用していますし、各列のために、私はDataset2からの要約を表示する必要が

条件付きでも動作しません。 SSRSで何かできるかどうか、誰かに私に何か考えてもらえますか?

レポートには10​​を超える列があり、それぞれ異なるデータセットから来ています。

答えて

0

最も単純な答えは、データセットのクエリを変更して複数の行を返さないようにすることです。クエリの行を結合します。

本の本当にシンプルなバージョンがちょうど外側の選択でDATASET2のために、既存のクエリをラップすることです... GROUP BY:

少し改訂DATASET2:

SELECT 
    Username, 
    SUM(totalCol2) as totalCol2 
FROM 
(
    SELECT Count(*) AS totalCol2, Username FROM database1 
    WHERE condition for this column... 
    GROUP BY Username 
    UNION ALL 
    SELECT Count(*) AS totalCol2, Username FROM database2 
    WHERE condition for this column... 
    GROUP BY Username 
) AS tableA 
GROUP BY Username 

少し大きいリライトは与えるだろうあなた:

SELECT 
    Username, 
    COUNT(*) AS totalCol2 
FROM 
    (SELECT UserName FROM database1 
    WHERE Condition 
    UNION ALL 
    SELECT UserName FROM database2 
    WHERE Condition 
    ) AS tableA 
GROUP BY Username 

上記のいずれのクエリでも、検索機能がうまく動作します。

しかし、あなたのdatabase1とdatabase2 がすべての10個のクエリで同じであれば、それらを結合しようとします。おそらく次のようなものがあります:

SELECT 
    Username, 
    SUM(Col1) AS totalCol1, 
    SUM(Col2) AS totalCol2, 
    ... 
FROM 
    (SELECT 
     UserName, 
     CASE WHEN [columns meet condition for Col1] 
     THEN 1 ELSE 0 END AS Col1, 
     CASE WHEN [test for condition of Column2] 
     THEN 1 ELSE 0 END AS Col2, 
     ... 
    FROM database1 

    UNION ALL 
    SELECT 
     UserName, 
     CASE WHEN [columns meet condition for Col1] 
     THEN 1 ELSE 0 END AS Col1, 
     CASE WHEN [test for condition of Column2] 
     THEN 1 ELSE 0 END AS Col2, 
     ... 
    FROM database2 
    ) AS tableA 
GROUP BY Username 
+0

ありがとうございました。私は2つのデータセットでのみテストしました、私はもっとテストします! – user1004299

関連する問題