2013-02-08 47 views
1

使用SQL Server 2008,我需要一個查詢,顯示結果如下如何創建查詢以顯示下表中的清單?

User_Name  Group_Name   Checked 
user1    Lead     0 
user1    Admin    1 
user1    Supervisor   0 
user1    Monitor    0 
user2    Lead     0 
user2    Admin    0 
user2    Supervisor   1 
user2    Monitor    1 

我有4個組(鉛,管理,監控器,監視器)和鏈接表是用戶組。如何爲每個用戶顯示所有組(如上所述)?如果組被檢查用戶,它將顯示在用戶組中,而不是在表中未選中。

的表格:

用戶:

User_ID int 
User_Name nvarchar 
Email nvarchar 

組:

Group_ID int 
Group_Name nvarchar 

用戶組:

User_ID int, 
Group_ID int 

回答

1

試試這個:

select User.User_Name, Group.Group_Name, 
case when UserGroup.User_ID is null then 0 else 1 end as Checked 
from User cross join Group 
left join UserGroup on User.User_ID = UserGroup.User_ID 
    and Group.Group_ID = UserGroup.Group_ID 
+0

這就是完美!謝謝! – Chaka 2013-02-08 21:12:52

+0

歡迎您,請將您的答案標記爲已接受 – Noxthron 2013-02-08 21:17:36

0

在SQL Server 2005+可以使用APPLY運營商將每group值分配給每個user,那麼你可以加入在usergroup表:

select u.user_name, 
    g.group_name, 
    case when ug.user_id is not null then 1 else 0 end Checked 
from [user] u 
cross apply [group] g 
left join usergroup ug 
    on u.user_id = ug.user_id 
    and g.group_id = ug.group_id 

請參閱SQL Fiddle with Demo