2016-10-13 5 views
0

У меня есть следующие данные образца в таблице (EQUCODES), столбец «КОД» имеет эквивалентное значение, которое представлено в столбце «EQCODE». Это значение в колонке «EQCODE» может быть еще одна запись с таким же значением в столбце «CODE» и эквивалентное значение будет иметь значение наоборот, т.е.строки группы, которые имеют одинаковое эквивалентное значение

ID || CODE || EQCODE 
-------------------------- 
1 || a || b 
2 || b || a 
3 || c || d 
4 || d || c 

другой таблицы (CLIENTTYPE), что я хочу присоединиться к выше таблица имеет следующий estructure,

CLIENTID || CODE 
-------------------------- 
1   || a 
2   || a  
3   || b 
4   || a 
6   || b 
7   || b 

Как можно сгруппировать это CLIENTTYPE записи таким образом, чтобы запрос возвращал одну запись, потому что они являются эквивалентами, когда они соединяются с таблицей EQUCODES?

+2

Если они являются две входные таблицы, которые вы хотите объединить, предоставили выходные данные. – Esty

ответ

0

Чтобы найти канонический код для каждого клиента, используйте:

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 
Смежные вопросы