#sql #sql-server #sql-server-2008
#sql #sql-сервер #sql-server-2008
Вопрос:
У меня есть следующий образец данных в таблице (EQUCODES), столбец «CODE» имеет эквивалентное значение, которое представлено в столбце «EQCODE». Это значение в столбце «EQCODE» может быть другой записью с тем же значением в столбце «CODE», и эквивалентное значение будет иметь обратное значение, т.е.
ID || CODE || EQCODE
--------------------------
1 || a || b
2 || b || a
3 || c || d
4 || d || c
другая таблица (CLIENTTYPE), к которой я хочу присоединиться, имеет следующую структуру,
CLIENTID || CODE
--------------------------
1 || a
2 || a
3 || b
4 || a
6 || b
7 || b
Как я могу сгруппировать эти записи типа CLIENTTYPE таким образом, чтобы запрос возвращал одну запись, потому что они являются эквивалентами после их объединения с таблицей EQUCODES ?
Комментарии:
1. Если вы хотите объединить две входные таблицы, пожалуйста, предоставьте выходные данные.
Ответ №1:
Чтобы найти канонический код для каждого клиента, используйте это:
select ClientID, min(code) as Code
from (
select ClientID, EQUCODES.EQCode as Code
from CLIENTTYPE inner join EQUCODES on CLIENTTYPE.Code = EQUCODES.Code
Union
select ClientID, EQUCODES.Code
from CLIENTTYPE inner join EQUCODES on CLIENTTYPE.Code = EQUCODES.EQCode
) U
Group By ClientID
Если затем вы захотите выполнить агрегирование по code
, вы можете обернуть этот запрос в это:
select Code, count(ClientID) from
( -- the query above
) G
Group by Code