1

我有一个表,我在其中存储用户授予或拒绝访问软件不同模块的权限。

idUser     idModule
  1           1
  1           2
  1           3
  2           4

用户“1”可以访问模块 1、2、3,但不能访问模块 4。用户“2”只能访问模块 4。

因此,idModule 是 Module 表中的 FK,如果用户有权访问,它将在此表中保留一行,否则将被拒绝。

idModule           Module
   1          Can Create Users
   2          Can Edit Users
   3          Can Delete Users
   4          Can View Users

我想要一个输出的查询:

idUser  Module1    Module2    Module3    Module4
  1        1          1          1          0
  2        0          0          0          1

这种方式很容易做报告。

谢谢阅读。

4

1 回答 1

0

也许是一个简单的反规范化查询:

select idUser
     , max(case when idModule=1 then 1 else 0 end) as Module1
     , max(case when idModule=2 then 1 else 0 end) as Module2
     , max(case when idModule=3 then 1 else 0 end) as Module3
     , max(case when idModule=4 then 1 else 0 end) as Module4
from   your_table
group by 1
于 2012-07-27T20:40:47.653 回答