2012-07-27 59 views
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 

這種方式是很容易做到的報告。

感謝您的閱讀。

+0

而且您正在使用什麼數據庫產品? Oracle,Mysql,Sql服務器? – Ghost 2012-07-27 20:46:54

+0

@Ghost MS Sql Server 2008 R2。謝謝 – Jaxedin 2012-07-27 21:01:04

+0

@hsanders我使用CASE WHEN,希望看到其他方式。 – Jaxedin 2012-07-27 21:04:00

回答

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 
+0

如果我添加了一些模塊,我必須編輯這個查詢。有沒有一種方法可以與1,2,3或N模塊? – Jaxedin 2012-07-27 21:03:37

+0

由於您有一個包含所有idModule值的表,您可以編寫一個過程或宏來生成類似於上面的select語句。也許你應該問另一個問題或修改這個問題(我不知道該協議)。 – BellevueBob 2012-07-27 21:40:28

+0

感謝Bob,我會用「case when」。 – Jaxedin 2012-07-28 14:18:04