2012-03-05 7 views
4

SQL Server 2008を使用して、標準の多対多リレーションシップを持つピボットテーブルを返すクエリを作成する方法を理解しようとしています。この関係は、どのユーザーがどのロールに属しているかを定義し、サイドに沿ってユーザー名をリストし、上部にロール名を表示するようにします。最終的な目標は、SQL Server Reporting Servicesでこの出力を行うことです.SQLサーバーがピボット結果を生成するかSSRSが結果を生成するかは関係ありません。ここに私のサンプル・スキーマは次のとおりです。SSRSで使用する多対多リレーションシップのSQLピボットテーブル

ユーザー表:

  • ユーザーID
  • ユーザー名

権利表:

  • をRightID
  • RightName

RightsMembership表:

  • ユーザーID
  • は、私はSSRSのレポートとして、次のような出力をしたい

をRightID。どんな助けもありがとうございます。

 RightOne RightTwo RightThree RightFour 
jdoe  X   X 
mjane  X      X 
ssmith    X   X   X 

はFYI:役割を追加することができますので、私はハードコードにロール名を持っているか、クエリでカウントしたくありません。

+0

私が約3時間で帰宅するまでにこれが返答されなければ、私はそれに答えるでしょう。ちょうどあなたが知っている、私が考えている解決策は、動的SQLとレポートで行列を実行するストアドプロシージャが必要になります。 –

+0

ありがとう、ジェレミー。私はSQLサーバーで "ピボット"コマンドを使用したいものと似た何かを示すサイトを見つけましたが、彼が使用している例は私が探しているもの(1対多の関係)とはまったく一致しません。このhttp://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspxの意見はありますか? – bigmac

+0

PIVOTでは、作成するすべての列に明示的に名前を付ける必要があります。そのため、クエリを動的に作成する必要があります。SELECT DISTINCT RightsName FROM権利を使用して、クエリ文字列を作成するために使用できるリストを取得します。次に、sp_executesqlを使用して動的クエリを実行します。 SSRSで列グループを持つマトリックスを使用すると、列の動的カウントが可能になります。私が家に帰ると、私は答えをより詳細にすべて明らかにするでしょう。 :) –

答えて

5

私はピボットテーブルについては知らないが、あなたは

Select UserName, 
      RightName 
From users u INNER JOIN RightMembership rm on rm.UserID = u.UserID 
      INNER JOIN Rights r on rm.RightID = r.RightID 

ためと

作成することにより、ストアドプロシージャまたはクエリとしてこのクエリと順序を使用し、以下のようSSRSでこれを達成することができます行でレポート

におけるデータセットとデータソース

挿入行列作成されたデータセットからユーザー名フィールドを選択列では、作成されたデータセットのRightNameフィールドを選択します データでこの式を使用すると、以下のような出力が得られます = IIF(Fields!UserName.Value =何もない、「X」)行列

+0

それは完全に機能しました。レポート・ウィザードでは、ディテール・エリアに値を持たないマトリックスを作成することができなかったので、クエリをわずかに修正して、3番目のフィールドとして '1 as Available'を追加しました。私がそれを行い、詳細で** Available **フィールドを使用すると、ウィザードは必要に応じてレポートを設計しました。ご協力いただきありがとうございます! – bigmac

関連する問題