The quick way to do this, is with subqueries.
select seg_airline, seg_origin_code, seg_destination_code from seg
where
(Select count(distinct seg_airline) from seg s where s.seg_origin_code = seg.seg_origin_code) = 4
and
(Select count(distinct seg_airline) from seg s where s.seg_destination_code = seg.seg_destination_code) = 4
To make it continue to work no matter how many airlines get added, you can do this;
declare @airlineCount int
select @airlineCount = count(distinct seg_airline) from seg
select seg_airline, seg_origin_code, seg_destination_code from seg
where
(Select count(distinct seg_airline) from seg s where s.seg_origin_code = seg.seg_origin_code) = @airlineCount
and
(Select count(distinct seg_airline) from seg s where s.seg_destination_code = seg.seg_destination_code) = @airlineCount
If you didn't want it where ALL the airlines had the same origin and destination, only where more than one had the same, you could get rid of the subqueries and do this:
select distinct s1.seg_airline, s1.seg_origin_code, s1.seg_destination_code from seg s1
inner join seg s2 on s1.seg_origin_code = s2.seg_origin_code and s1.seg_destination_code = s2.seg_destination_code and s1.seg_airline <> s2.seg_airline
You need the distinct, because, by definition, this creates a pair of rows for every match.