SQL查询以选择我的第一列常用的记录
我有一张和上面一样的桌子。现在我想选择SEG_起点代码和SEG_终点代码 这是所有SEG_航空公司的共同点 我想要像这样的输出SQL查询以选择我的第一列常用的记录,sql,sql-server,Sql,Sql Server,我有一张和上面一样的桌子。现在我想选择SEG_起点代码和SEG_终点代码 这是所有SEG_航空公司的共同点 我想要像这样的输出 SEG_AIRLINE SEG_ORIGIN_CODE SEG_DESTINATION_CODE G9 ALA DEL G9 ALA DAC G9
SEG_AIRLINE SEG_ORIGIN_CODE SEG_DESTINATION_CODE
G9 ALA DEL
G9 ALA DAC
G9 BKK OOL
SG IXA MAA
SG BKK OOL
SG IXA GAU
6E IXA AMD
6E BKK OOL
6E IXA DEL
AK BKK MEL
AK BKK OOL
AK BKK PER
我尝试了这个问题
SEG_AIRLINE SEG_ORIGIN_CODE SEG_DESTINATION_CODE
G9 BKK OOL
SG BKK OOL
6E BKK OOL
AK BKK OOL
我试过的另一个解决办法
SELECT SEG_AIRLINE ,SEG_ORIGIN_CODE ,SEG_DESTINATION_CODE
FROM T_N_SEGMENTS
GROUP BY SEG_AIRLINE
HAVING COUNT(DISTINCT SEG_ORIGIN_CODE) = (SELECT COUNT(DISTINCT SEG_ORIGIN_CODE) FROM T_N_SEGMENTS)
但我不会根据您的评论返回任何记录更新。这将为您提供最常见的
seg\u源代码、seg\u目标代码对的行
declare @airlineCount int
select @airlineCount = count(distinct seg_airline) from T_N_SEGMENTS
select seg_airline, seg_origin_code, seg_destination_code from T_N_SEGMENTS
where
(Select count(distinct seg_airline) from T_N_SEGMENTS s where s.seg_origin_code = T_N_SEGMENTS.seg_origin_code) = @airlineCount
and
(Select count(distinct seg_airline) from T_N_SEGMENTS s where s.seg_destination_code = T_N_SEGMENTS.seg_destination_code) = @airlineCount
这里是演示
你可以这样做
SELECT seg_airline, seg_origin_code, seg_destination_code
FROM
(
SELECT seg_airline, seg_origin_code, seg_destination_code,
RANK() OVER (ORDER BY cnt DESC) rank
FROM
(
SELECT seg_airline, seg_origin_code, seg_destination_code,
COUNT(*) OVER (PARTITION BY seg_origin_code, seg_destination_code) cnt
FROM t_n_segments
) q
) p
WHERE rank = 1
或者使用窗口功能
SELECT s.seg_airline, s.seg_origin_code, s.seg_destination_code
FROM
(
SELECT seg_origin_code, seg_destination_code
FROM t_n_segments
GROUP BY seg_origin_code,seg_destination_code
HAVING COUNT(DISTINCT seg_airline) =
(
SELECT COUNT(DISTINCT seg_airline)
FROM t_n_segments
)
) q JOIN t_n_segments s
ON q.seg_origin_code = s.seg_origin_code
AND q.seg_destination_code = s.seg_destination_code
输出:
SELECT seg_airline, seg_origin_code, seg_destination_code
FROM
(
SELECT seg_airline, seg_origin_code, seg_destination_code,
COUNT(*) OVER (PARTITION BY seg_origin_code, seg_destination_code) cnt
FROM t_n_segments
) q
WHERE cnt =
(
SELECT COUNT(DISTINCT seg_airline)
FROM t_n_segments
)
|SEG|U航空公司| SEG|U始发地| SEG|U目的地|代码|
|-------------|-----------------|----------------------|
|G9 | BKK | OOL|
|SG | BKK | OOL|
|6E | BKK | OOL|
|AK | BKK | OOL|
这是演示您想要X,但您尝试了什么?您使用的是什么RDBMS?谢谢。工作正常。但当任何一家航空公司与其他航空公司不匹配时,它会返回空结果。不客气。您能否在示例数据上显示这一点,最好在注释中单击此处的buildschema
后更改我的SQLFIDLE并发布到新SQLFIDLE的链接。在你的要求中,你提到了所有赛格尤航空公司的共同要求。
| SEG_AIRLINE | SEG_ORIGIN_CODE | SEG_DESTINATION_CODE |
|-------------|-----------------|----------------------|
| G9 | BKK | OOL |
| SG | BKK | OOL |
| 6E | BKK | OOL |
| AK | BKK | OOL |