我需要帮助识别在另一个表中具有不同状态的表成员组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要帮助识别在另一个表中具有不同状态的表成员组相关的知识,希望对你有一定的参考价值。
我无法用谷歌来解决这个问题。我仍然是TSQL的新手,我想我可以用自联接和子查询来解决这个问题。但是我得到了很多结果,不知道如何驯服它们。我很感激帮助。很高兴看到人们为同一个问题提出的所有不同方法。我知道在尝试解决问题时我会获得隧道视觉,当从不同的角度尝试它时会更好。
我的目标是这个。我想返回其PersonID的HairColor彼此不匹配的所有家庭的HouseholdID。无论颜色如何。因此,HouseHoldID 200将返回,因为他们的PersonID的HairColor彼此不同。与HouseHoldID 300不同,其PersonID的HairColor彼此匹配。
HouseholdMember
+------------+-----------------+-----------+
| MemberID | HouseholdID | PersonID |
+------------+-----------------+-----------+
| 100 | 200 | 1 |
| 101 | 200 | 2 |
| 102 | 200 | 3 |
| 103 | 300 | 4 |
| 104 | 300 | 5 |
| 105 | 300 | 6 |
+------------+-----------------+-----------+
Person
+------------+-----------------+-----------+------------+
| PersonID | FirstName | LastName | HairColor |
+------------+-----------------+-----------+------------+
| 1 | Josh | Smith | Brown |
| 2 | Jerry | Smith | Black |
| 3 | Ethan | Smith | Red |
| 4 | Mike | Jones | Black |
| 5 | Devan | Jones | Black |
| 6 | Todd | Jones | Black |
+------------+-----------------+-----------+------------+
Household
+---------------+-----------------+----------------+
| HouseholdID | Name | Address |
+---------------+-----------------+----------------+
| 200 | Smith's | 123 Candy Dr |
| 300 | Jones's | 812 Dentist Ln |
+---------------+-----------------+----------------+
答案
一个选项使用聚合:
WITH cte AS (
SELECT hm.HouseholdID
FROM HouseholdMember hm
INNER JOIN Person p ON hm.PersonID = p.PersonID
GROUP BY hm.HouseholdID
HAVING COUNT(DISTINCT p.HairColor) > 1
)
SELECT *
FROM Household
WHERE HouseholdID IN (SELECT HouseholdID FROM cte);
以上是关于我需要帮助识别在另一个表中具有不同状态的表成员组的主要内容,如果未能解决你的问题,请参考以下文章
如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?