2013-04-29 131 views
0

我有一個表具有用戶ID,另一個表作爲AD組;某些AD組會告訴您客戶是否是VIP,Pilot,遠程訪問等組的成員。在一個表中查找值以更新另一個表

當試圖創建一個視圖來顯示客戶端是哪個組的成員時,我遇到了必須爲每個組名稱創建單獨聯接的問題,因爲不這樣做會在結果中創建重複項。

Table One 
Client_ID Client_Name 
--------- ------------ 
A    ABC 
D    DEF 
G    GHI 

Table Two: 
Client_ID  AD_Group 
---------  -------- 
A    I_GroupX 
A    GroupY 
D    B_GroupX 
D    GroupZ 
G    GroupY 
G    GroupZ 

Result Table: 
Client_ID  Client_Name  VIP(X)  Pilot(Y)  RemoteAccess(Z) 
---------  -----------  ------  --------  ----------- 
A     ABC   I_GroupX  GroupY   Not Member 
D     DEF   Not Member GroupY   GroupZ 
G     GHI   B_GroupX  Not Member  GroupZ 

這工作,但必須創建一個爲每個組,而不是所有在一個視圖:

SELECT Client_ID, 
     ,Client_Name 
     ,[VIP] = CASE 
     WHEN A.GroupX IS NULL THEN 'Not Member' 
          ELSE A.AD_Group 
     END 
    FROM Table1 LEFT OUTER JOIN 
     (SELECT [Client_ID] 
      ,[AD_Group] 
     FROM Table2 
     WHERE [AD_Group] LIKE '%GroupX') A 
    ON Client_ID = A.Client_ID 

在此先感謝

回答

1
SELECT Client_ID, Client_Name, 
[VIP(X)] = ISNULL((select AD_Group from Table2 where Client_Id = t1.Client_ID and AD_Group LIKE '%GroupX'), 'Not Member'), 
[Pilot(Y)] = ISNULL((select AD_Group from Table2 where Client_Id = t1.Client_ID and AD_Group LIKE '%GroupY'), 'Not Member'), 
[RemoteAccess(Z)] = ISNULL((select AD_Group from Table2 where Client_Id = t1.Client_ID and AD_Group LIKE '%GroupZ'), 'Not Member') 
FROM Table1 t1 
+0

感謝您的及時回覆。我們幾乎在那裏,因爲如果有人在AD組中有人在場,這會給出是或否。我遇到的問題是我需要列出AD組名,因爲試點客戶可能是IT Pilot或Business Pilot,並且具有名爲IT_GroupX和Bus_GourpX的相應組,因此需要查找LIKE'%GroupX'並返回組名 – user1886816 2013-04-29 21:08:46

+0

好的。所以我把'SELECT CASE'改成了'ISNULL()'。現在好嗎? – davmos 2013-04-29 21:31:56

+0

工作正常!非常感謝。欣賞它。 – user1886816 2013-04-30 16:33:33