Данные
origin OP_CARRIER_AIRLINE_ID
ATL 19790
ATL 19790
ATL 19790
ATL 19790
ATL 19790
ATL 19790
ATL 19790
ATL 19790
ATL 19790
ATL 19790
BWI 19790
BWI 19790
BWI 19790
BWI 19790
BWI 19790
BWI 19790
BWI 19790
В данных, которые у меня есть, я пытаюсь найти правильный способ сопоставления в следующем формате
Origin[Airlines]Origin
Я пытаюсь создать связь между два города, скажем, первый источник - город происхождения, а второй источник - город назначения.
select origin, a.OP_CARRIER_AIRLINE_ID, count(*) cnt
from a_Dec a
where a.OP_CARRIER_AIRLINE_ID= '19790 'and a.origin ='ATL'
group by origin, a.OP_CARRIER_AIRLINE_ID
Я получаю
origin OP_CARRIER_AIRLINE_ID cnt
ATL 19790 19201
, что правильно, то есть в ATL было совершено 19201 рейсов.
Теперь я хочу обработать второй источник как пункт назначения, и я использовал следующий запрос
select a.OP_CARRIER_AIRLINE_ID, a.origin, b.origin, count(*) cnt
from [dbo].[a_Dec] a
left join [dbo].[a_Dec] b
on (a.OP_CARRIER_AIRLINE_ID = b.OP_CARRIER_AIRLINE_ID)
where a.OP_CARRIER_AIRLINE_ID is not null
and a.origin is not null
group by a.OP_CARRIER_AIRLINE_ID, a.origin, b.origin
having count(*)> 1
order by cnt desc
Пример результата
OP_CARRIER_AIRLINE_ID origin origin cnt
19790 ATL ATL 368678401
19805 DFW DFW 141158161
19790 MSP ATL 96389020
19790 ATL BWI 96389020
368678401
- результат выше 19201*19201
, который по существу является декартовым произведением.
это неправильный запрос, я знаю, но как я смогу сформировать отношения для этого? На самом деле, строка
19790 ATL ATL 368678401
или 19805 DFW DFW 141158161
даже не должна существовать в результате. Обратите внимание, что это по сути создает egde, как вызывается в базе данных графа, но в ситуации, когда нет доступной базы данных графа, как мы можем решить эту загадку простым sql?