2008-08-21 10 views
0

は、私はSQL Server Reporting Servicesのに新たなんだ、と次の操作を行うための最善の方法を思っていた: MS Reporting Servicesで動的サブクエリを実行する最適な方法は?

  • サブクエリからプロパティを取得するために各アイテムで人気のあるIDのリストを取得するには

    • クエリを別のテーブル

    理想的には、最終報告書の列は次のようになります。

    [ID] [property1] [property2] [SELECT COUNT(*) 
               FROM AnotherTable 
               WHERE ForeignID=ID] 
    

    これをすべて実行するための巨大なSQLクエリを作成する方法があるかもしれませんが、コンパイルすることをお勧めします。各行にサブクエリを実行するVB関数を記述することをお勧めしますか?助けてくれてありがとう。

  • 答えて

    2

    を使用することをおすすめします。 SubReportを表のセルに配置します。ここ

    select *, 
    (select count(*) from tbl2 t2 where t2.tbl1ID = t1.tbl1ID) as cnt 
    from tbl1 t1 
    

    は(テーブル変数を使用して)実行可能なバージョンです:

    0

    最も簡単な方法はこれです

    declare @tbl1 table 
    (
    tbl1ID int, 
    prop1 varchar(1), 
    prop2 varchar(2) 
    ) 
    
    declare @tbl2 table 
    (
    tbl2ID int, 
    tbl1ID int 
    ) 
    
    select *, 
    (select count(*) from @tbl2 t2 where t2.tbl1ID = t1.tbl1ID) as cnt 
    from @tbl1 t1 
    

    明らかにこれは単なる生の一例である - 標準ルールは選択しないように適用されます*、等...


    午前21時27分で、8月21日'08からUPDATE:
    @AlexCuse - はい、完全にパフォーマンスに同意します。

    外部結合でそれを書き始めましたが、サンプル出力でカウントと思ったことを見て、テーブルが外部結合されていればカウントが正しく返されませんでした。言い換えれば、ジョインは、レコードが乗算される原因になることはありません(tbl1からの1エントリは、tbl2 = 2の2エントリに一致します)。

    だから私は本当にあなたのクエリが返す必要があるの詳細に沸騰すると思います。 22:07で'08 8月21日から


    UPDATE:
    あなたの質問の他の部分に答えるために - VB関数が移動するための方法ですが?いいえ、絶対にそうではありません。これは単純ではありません。

    機能がパフォーマンス上非常に悪い場合、リターンセットの各行がその機能を実行します。

    クエリのさまざまな部分を「コンパートメント化」する場合は、ストアドプロシージャのようにアプローチする必要があります。テンポラリテーブルを作成し、クエリの一部を実行して結果をテーブルに挿入し、必要なクエリを実行して、元のテンポラリテーブルを更新します(または、より多くのテンポラリテーブルに挿入します)。

    0

    出力をどのように表示するかによって、サブレポートが行うことができます。また、ID、property1、property2をグループ化して、別のテーブルの項目を詳細項目として表示することもできます(カウントだけでなく、 )。

    select t1.ID, t1.property1, t1.property2, t2.somecol, t2.someothercol 
    from table t1 left join anothertable t2 on t1.ID = t2.ID 
    

    @Carlton Jenkeよう

    何かが私はあなたが外であなたが与えた例では、相関サブクエリよりも良い演奏に参加見つけると思います。サブクエリは各行に対して実行する必要があることに注意してください。