2015-11-10 99 views
2

我在sql中有以下表格。爲了便於閱讀,我只在這裏輸入了少量的表格數據,並排除了與此問題無關的列。在SQL Server 2012中,Sum並不是我的總和

表旅行(包括time_out_only和time_in_only因爲這些被用於計算列time_in_flight):

trip_no (PK, int not null) 
time_out_only (time(0) null) 
time_in_only (time(0) null) 
time_in_flight (computed, time(3) null) 

表Passengers_in_trip:

trip_no (PK, FK, int not null) 
    id_psg (PK, FK, int not null) 

表乘客:

id_psg (PK, int not null) 
    name (char(20) not null) 

的信息對兩名乘客如下;

表 - 旅行(只包括行程沒有和time_in_flight)

Trip No  time_in_flight 
    1100    200 
    1181    109 
    1187    117 
    1188    118 

表 - Passengers_in_trip:

Trip No   IS_Psg 
    1100    1 
    1181    1 
    1187    8 
    1188    8 

表 - 乘客:

​​

問題/查詢: 查找乘坐飛行時間最多的乘客。

我曾嘗試以下語法

SELECT SUM(Trip.time_in_flight) AS total_flying_time, Passenger.name 
FROM Trip 
JOIN Pass_in_trip 
ON Trip.time_no = Pass_in_trip.trip_no 
JOIN Passenger 
ON Pass_in_trip.ID_Psg = Passenger.ID_Psg 
GROUP BY Trip.time_in_flight, Passenger.name; 

結果應該是309約瑟夫·史密斯(ID_Psg 1)和235伊萊恩·麥考伊(ID_Psg 8)

但是我的語法不歸納爲我。我的結果顯示如下;

Name    total_flying_time 
Joseph Smith   200 
Joseph Smith   109 
Elaine McCoy   117 
Elaine McCoy   118 

我已經嘗試了上面的語法的變化,但沒有什麼是總結乘客,給我的乘客總飛行時間,這樣我就可以通過最高飛行時間命令他們,甚至選擇前5名。

我不確定是否因爲time_in_flight是一個計算列,它會影響總和。但是,SQL確實允許我們對計算列進行求和。

我想我的加入是正確的,以獲得乘客姓名的結果。所以我不確定我在這個查詢中出錯的地方。

誰能幫助?我已經搜索了答案並嘗試了不同的語法,但沒有任何工作和它變得令人沮喪。

感謝所有幫助。

感謝何超儀

+2

好吧,你被'time_in_flight',這沒有任何意義真的分組。從「GROUP BY」中刪除它,它會給你你想要的結果 – Lamak

回答

1

不組由Trip.time_in_flight

SELECT SUM(Trip.time_in_flight) AS total_flying_time, Passenger.name 
FROM Trip 
JOIN Pass_in_trip 
ON Trip.time_no = Pass_in_trip.trip_no 
JOIN Passenger 
    ON Pass_in_trip.ID_Psg = Passenger.ID_Psg 
GROUP BY Passenger.name; 
+2

謝謝,這對我很有用。 – Josie

+1

@Josie不客氣。有趣的事情:http://stackoverflow.com/questions/33503731/re-computed-column-by-subtracting-two-other-columns-in-sql-server :) – lad2025