У меня есть две таблицы:
Информация о родителе и зависимая информация
Структура таблиц следующая:
Родитель
ID | First | Last | DOB | Address
-------------------------------------------------
1 | John | Doe | 1980-01-01 | 123 street
2 | Ryan | Mack | 1974-12-12 | 444 Place
Зависимые
ParentID | Type | First | Last | DOB
--------------------------------------------------
1 | Spouse | Jane | Doe | 1981-02-01
1 | Child | Mike | Doe | 1999-08-01
1 | Child | Zoe | Doe | 2002-04-01
2 | Spouse | Sarah | Mack | 1964-01-01
2 | Child | Andrew | Mack | 1997-05-01
Я хочу построить запрос (в идеале один вызов с объединениями, который возвращает следующее:
Таблица результатов
First | Last | Type | DOB | Address
----------------------------------------------------------------
John | Doe | Parent | 1980-01-01 | 123 Street
Jane | Doe | Spouse | 1981-02-01 | 123 Street
Mike | Doe | Child | 1999-08-01 | 123 street
Zoe | Doe | Child | 2002-04-01 | 123 Street
Ryan | Mack | Parent | 1974-12-12 | 444 Place
Sarah | Mack | Spouse | 1964-01-01 | 444 Place
Andrew | Mack | Child | 1997-05-01 | 444 Place
Я могу построить приведенную выше таблицу с помощью другого пользователя SO по следующему запросу:
SELECT t.First, t.Last, t.Type, t.DOB, t.Address
FROM (SELECT ID, First, Last, 'Parent' as Type, DOB, Address, 1 as SortKey
FROM Parent
UNION ALL
SELECT p.ID, d.First, d.Last, d.Type, d.DOB, p.Address,
CASE WHEN d.Type = 'Spouse' THEN 2 ELSE 3 END as SortKey
FROM Dependents d
INNER JOIN Parent p
ON d.ParentID = p.ID) t
ORDER BY t.ID, t.SortKey
Я пытаюсь решить (потенциально) большую проблему в том смысле, что мне приходится подсчитывать каждую запись для конкретного идентификатора члена на основе нескольких параметров.
Родители всегда будут 1,
Супругов всегда будет 2 (если они существуют)
Дети начнут с 3 и будут продолжать, пока их больше не будет (если они существуют).
Мой конечный стол будет выглядеть так:
First | Last | Type | DOB | Address | Count
---------------------------------------------------------------------------
John | Doe | Parent | 1980-01-01 | 123 Street | 1
Jane | Doe | Spouse | 1981-02-01 | 123 Street | 2
Mike | Doe | Child | 1999-08-01 | 123 street | 3
Zoe | Doe | Child | 2002-04-01 | 123 Street | 4
Ryan | Mack | Parent | 1974-12-12 | 444 Place | 1
Sarah | Mack | Spouse | 1964-01-01 | 444 Place | 2
Andrew | Mack | Child | 1997-05-01 | 444 Place | 3
Я знаю, что могу установить пользовательскую переменную в начале вызова с помощью:
SET @counter: = 0;
ТО
@counter: = @ counter + 1 в качестве счетчика,
но это просто продолжит подсчет до конца запроса sql, а не по ID.
Есть идеи?