0

私は SQL Server Reporting Services を初めて使用し、次のことを行う最善の方法を考えていました。

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

理想的には、最終レポートの列は次のようになります。

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

これをすべて一度に実行する巨大な SQL クエリを構築する方法があるかもしれませんが、私はそれを区分化することを好みます。行ごとにサブクエリを実行する VB 関数を作成する推奨される方法はありますか? 助けてくれてありがとう。

4

3 に答える 3

2

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

于 2008-08-21T19:28:49.757 に答える
0

出力をどのように表示するかに応じて、サブレポートを作成するか、ID、プロパティ 1、プロパティ 2 でグループ化し、他のテーブルのアイテムを詳細アイテムとして表示することができます (単にカウント以上のものを表示したい場合)。

何かのようなもの

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あなたが示した例では、相関サブクエリよりも外部結合の方が優れたパフォーマンスを発揮すると思います。サブクエリは行ごとに実行する必要があることに注意してください。

于 2008-08-21T20:11:36.720 に答える
0

最も簡単な方法は次のとおりです。

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

これが実行可能なバージョンです(テーブル変数を使用):

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

明らかに、これは生の例にすぎません - * を選択しないなどの標準的なルールが適用されます ...


2008 年 8 月 21 日 21:27 からの更新:
@AlexCuse - はい、パフォーマンスに完全に同意します。

私は外部結合でそれを書き始めましたが、彼のサンプル出力でカウントを見て、それが彼が望んでいたものだと思いました.テーブルが外部結合されている場合、カウントは正しく返されません. 言うまでもなく、結合によってレコードが乗算され (tbl2 の 2 つのエントリに一致する tbl1 からの 1 つのエントリ = 2 が返される)、これは意図しない可能性があります。

したがって、クエリが何を返す必要があるかについての詳細に要約すると思います。


2008 年 8 月 21 日 22:07 からの更新:
質問の他の部分に答えるには、VB 関数を使用する方法はありますか? いいえ、絶対に違います。この単純なものではありません。

関数はパフォーマンスが非常に悪く、戻りセットの各行が関数を実行します。

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

于 2008-08-21T19:35:07.777 に答える