0

SQLに列挙されて格納されている特定のレベルの権限を持つ多数のプロファイルがあります。 SSRS内で、テーブルの左側にあるすべての権限と上部にあるすべての権限をXまたは適切な権限を持つプロファイルの指示で表示するレポートを作成します。この情報は3つのテーブルに格納されます。SQL SSRSの結果を行列に変換する

表1:許可番号(実際には、プロファイルに付与された権限だけを持つプロファイルのGUIDを提供します。この中に表示される - : - Profile_Privは、プロファイルは

は表2は、GUIDに戻って関連するプロファイルの名前を与えますテーブル)

表3:特権 - 許可番号を許可の名前に戻します。

私は、プロファイルに割り当てられたアクセス権を取得するクエリを持っていますが、空の行列にすべての可能な権限を簡単に設定できますが、2つの結婚は私を逃しています。これは私が今までSSRSで持っていたものです。 ProfileNameというSSRS内のパラメータを渡して、その特定のレポートに必要なプロファイルをクエリで表示できるようにします。

Select Privileges.Description, Profiles.Name 
FROM Privileges LEFT OUTER JOIN 
Profile_Priv ON Privileges.ID = Profile_Priv.ID INNER JOIN 
Profiles ON Profile_Priv.PID = Profiles.PID 
WHERE (Profiles.Name = @ProfileName) 
ORDER BY Privileges.ID 

これは私がそれが予想されるように、テーブル内の情報のいずれかを移入せず、また、データの任意の型を行うことはありませんがYesに値を回すように変換します。

ご迷惑をおかけして申し訳ございません。

追加1:参加完全にそれを変更するとき

はしても、個々のプロファイルをやってするのは、特定のプロファイルを持っている権限を返します。私が作成しているよ何

は、レポートに次のようなものです:

   Profile 1  Profile 2  Profile 3 Profile 4 
Permission 1 X       X      
Permission 2 X    X    X   X 
Permission 3     X       X 
Permission 4           

私はプロファイル2を探していた場合には現在、私は上からの例を使用してこれを取得する:

   Profile 2        
Permission 2 X    
Permission 3 X    
+0

現在入手しているデータの例と、レポートでの表示方法を追加する必要があります。 –

+0

説明のために追加情報を追加しました。 – CPickler

+0

あなたは**プロフィール2 **のためにフィルタリングしていますので、権限** 2 **と** 3 **が唯一のものです。 WHERE句をすべて削除する必要がある場合は、WHERE句を削除する必要があります。そうしないと、フィルタは選択したプロファイルのみをテーブルに追加します。 –

答えて

1

あなたは完全な外部結合を行うことができますが、WHERE句を使用する代わりに、CASE文を使用して、「True」(プロファイルにそのパーミッションがある場合)か、そうでない場合は「False」のいずれかを返します。そうすれば、常にすべての権限が得られます。

+0

caseステートメントは、この問題を完全に解決しました。ありがとうございました。 – CPickler

関連する問題