我有许多配置文件具有一定级别的权限,这些权限在SQL中被枚举和存储。我想在SSRS中创建一个报告,该报告显示表左侧的所有权限以及顶部的所有配置文件,其中包含X或具有相应权限的配置文件的某些指示。此信息存储在三个表中。
表1:配置文件 - 提供与GUID相关的配置文件的名称
表2:Profile_Priv - 提供具有权限编号的配置文件的GUID(实际授予配置文件的权限仅显示在此表中)
表3:权限 - 将权限号重新关联到权限名称。
我有一个查询,它将获取分配给配置文件的权限,并且我可以轻松地使用所有可能的权限填充空白矩阵,但是将两者结合在一起可以逃避我。这就是我到目前为止在SSRS中所拥有的。我在SSRS中传递一个名为ProfileName的参数,以允许查询显示该特定报告所需的配置文件。
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
这不会像我预期的那样填充表格中的任何信息,也不会进行任何类型的数据转换,例如将值转换为是。
非常感谢任何反馈或帮助。
增加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 :(得分:1)
您可以执行完全外部联接,但不使用WHERE子句,而是使用CASE语句返回类似“True”(如果Profile具有该Permission)或“False”(如果不具有)。这样你就可以获得所有权限。