Мне нужна помощь в определении группы членов таблицы, которые имеют другой статус в другой таблице - PullRequest
0 голосов
/ 26 сентября 2018

Я не смог найти способ понять это.Я все еще очень плохо знаком с TSQL, и я подумал, что смогу решить эту проблему с помощью самостоятельных соединений и подзапросов.Но я добиваюсь многих результатов и не знаю, как их приручить.Я ценю помощь.Приятно видеть все разные методы, которые люди предлагают для одной и той же проблемы.Я знаю, что у меня возникает туннельное зрение при попытке решить проблему, когда лучше попробовать ее под другим углом.

Моя цель заключается в следующем.Я хочу вернуть идентификатор домохозяйства для всех домохозяйств, у которых цвет волос PersonID не соответствует друг другу.Каким бы ни был цвет.Поэтому ниже HouseHoldID 200 будет возвращаться, так как их цвет волос PersonID отличаются друг от друга.В отличие от HouseHoldID 300, цвет волос PersonID которого совпадает.

               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 |
+---------------+-----------------+----------------+

1 Ответ

0 голосов
/ 26 сентября 2018

Один вариант использует агрегацию:

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

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...