我有2个表(用户,userContact)由一列连接userID
。
它们的结构如下:
表用户:
[User_id]
[User_Name]
表UserContact:
[UserContact_id]
[User_id]
[UserContact_Type]
[UserContact_Description]
因此,对于相同的对象[User_id]
,可以有多个[ UserContact_id
]。
我的问题是:我想建立一个联接,该联接[User_id]
从表返回每个,User
并且包括[UserContact_Description]
WHEN[UserContact_Type]
等于3,但不重复结果。
我尝试了什么:
SELECT DISTINCT
u.[User_id],
CASE
WHEN c.[UserContact_Type] = 3
THEN c.[UserContact_Description]
END AS UserContact
FROM
Table.user AS u
LEFT JOIN
Table.userContact AS c ON u.[User_id] = c.[User_id]
我得到这样的东西:
User_id UserContact
----------------------
6009 NULL
7010 NULL
7010 [email protected]
7012 NULL
8007 NULL
8007 [email protected]
它返回的所有结果Table.user
,但会为每个[User_id]
关联的数据([UserContact_Type]
而不是3)复制数据。
我需要的是[UserContact_Description]
仅在时返回[UserContact_Type] = 3
。
这是我对StackOverflow的第一个问题。我希望我做得对,但请随时指出我在帖子中犯的任何错误。
非常感谢大家。
编辑:
正如您在下表中所见,[User_id]
从来没有与之相关的[UserContact_Type]
UserContact_id User_id UserContact_Type
40107 4747 1
40108 4747 5
40109 4747 3
41107 5748 6
41108 5748 3
41215 6009 1
41216 6009 6
42222 7010 3
42223 7010 6
43214 8007 3
我想要什么:找到[User_id]
与a的关联时[UserContact_Type] = 3
,返回[UserContact_Description]
。如果与[User_id]
条件不相关,则不返回任何内容,并将该列[UserContact_Description]
留空或为null。
我要避免的事情是这样的结果:
User_id UserContact
6009 NULL
7010 NULL
7010 [email protected]
[User_id] = 6009很好,但是[User_id] = 7010是重复的,这是我的问题。我想要所有[User_id]。但是我只需要用[UserContact_Type]等于3来填充UserContact列。
希望现在更加清晰。
您需要表的左连接和条件聚合:
select u.[User_id], u.[User_Name],
max(case
when c.[UserContact_Type] = 3 then c.[UserContact_Description]
else null
end
) as UserContact_Description
from [User] u left join [userContact] c
on c.[User_id] = u.[User_id]
group by u.[User_id], u.[User_Name]
参见演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句