你可以不喜歡這樣。
創建並填充表格。
CREATE TABLE dbo.Icao
(
id int NOT NULL PRIMARY KEY,
icao nchar(4) NOT NULL
);
CREATE TABLE dbo.Flight
(
dep_id int NOT NULL
FOREIGN KEY REFERENCES dbo.Icao(id),
arr_id int NOT NULL
FOREIGN KEY REFERENCES dbo.Icao(id)
);
INSERT INTO dbo.Icao (id, icao)
VALUES
(1, N'LPPT'),
(2, N'LPFR'),
(3, N'LPMA'),
(4, N'LPPR'),
(5, N'LLGB'),
(6, N'LEPA'),
(7, N'LEMD');
INSERT INTO dbo.Flight (dep_id, arr_id)
VALUES
(1, 2),
(6, 2),
(6, 2),
(6, 2),
(6, 2),
(3, 2),
(3, 2),
(3, 2),
(3, 4),
(3, 4),
(3, 6),
(3, 6);
然後做一個使用兩個子查詢的SELECT。
SELECT
(SELECT TOP 1 I.icao
FROM dbo.Flight AS F
INNER JOIN dbo.Icao AS I
ON I.id = F.arr_id
GROUP BY I.icao
ORDER BY COUNT(*) DESC) AS 'most_arrivals',
(SELECT TOP 1 I.icao
FROM dbo.Flight AS F
INNER JOIN dbo.Icao AS I
ON I.id = F.dep_id
GROUP BY I.icao
ORDER BY COUNT(*) DESC) AS 'most_departures';
單擊工具欄上的這個按鈕,包括實際的執行計劃,當你執行查詢。
這是用於查詢的圖形化執行計劃。每個圖標代表將由SQL Server引擎執行的操作。箭頭表示數據流。流向從右到左,結果是最左邊的圖標。
哇,謝謝Lashane。它完美的作品。所以,這基本上是爲每列選擇分組的兩個獨立選擇。很容易,一旦你看到它......再次感謝! –
@NunoPinto是的,只要兩個選擇返回零或一行 - 你可以用這種方式 –