我需要帮助识别在另一个表中具有不同状态的表成员组

问题描述 投票:1回答:1

我无法用谷歌来解决这个问题。我仍然是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 |
+---------------+-----------------+----------------+
tsql
1个回答
0
投票

一个选项使用聚合:

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);

enter image description here

Demo

© www.soinside.com 2019 - 2024. All rights reserved.