Join 在一个表中查找值以更新另一个表
我有一个表有用户ID,另一个表作为广告组;某些广告组会告诉您客户是否是VIP、Pilot、Remote Access等组的成员 当试图创建一个视图来显示客户机是这些组中的哪些组的成员时,我遇到了一个问题,即必须为每个组名创建一个单独的联接,因为不这样做会在结果中创建重复项Join 在一个表中查找值以更新另一个表,join,filter,conditional-statements,lookup,Join,Filter,Conditional Statements,Lookup,我有一个表有用户ID,另一个表作为广告组;某些广告组会告诉您客户是否是VIP、Pilot、Remote Access等组的成员 当试图创建一个视图来显示客户机是这些组中的哪些组的成员时,我遇到了一个问题,即必须为每个组名创建一个单独的联接,因为不这样做会在结果中创建重复项 Table One Client_ID Client_Name --------- ------------ A ABC D DEF G
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
提前感谢感谢您的及时回复。我们几乎做到了,因为如果有人出现在其中一个广告组中,这会给出一个是或否的答案。我遇到的问题是,我需要列出广告组名称,因为试点客户机可能是IT pilot或Business pilot,其对应的组名为IT_GroupX和Bus_GourpX,因此需要查找“%GroupX”并返回组名称a OK。因此,我将
SELECT CASE
更改为ISNULL()
。现在好吗?
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