只要每行的停止次數預計不會很大,可以使用三角形連接。
WITH BUSLines(LineID, DepartureTime) AS
(
SELECT 1, CAST('1900-01-01T10:00:00' AS DATETIME) UNION ALL
SELECT 2, CAST('1900-01-01T12:30:00' AS DATETIME)
),
BUSStops(LineID,StopID,Hour,Minute) AS
(
SELECT 1,1,0,40 UNION ALL
SELECT 1,2,0,10 UNION ALL
SELECT 2,1,0,30 UNION ALL
SELECT 2,2,0,27 UNION ALL
SELECT 2,3,1,15
)
SELECT BL.LineID,
BS1.StopID,
DATEADD(MINUTE,SUM(BS2.Minute),DATEADD(HOUR,SUM(BS2.Hour),BL.DepartureTime))
FROM BUSLines BL
JOIN BUSStops BS1 ON BL.LineID = BS1.LineID
JOIN BUSStops BS2 ON BL.LineID = BS2.LineID AND BS2.StopID <= BS1.StopID
GROUP BY BL.LineID, BL.DepartureTime, BS1.StopID
哪個版本的SQL Server?如果> = 2005,那麼遞歸CTE將是有用的,而不使用臨時表&循環。更快啓動。抱歉,我沒有訪問SQL Server的代碼。順便說一句,包括創建表格和插入測試數據給寫答案的人會很好。 – 2011-05-04 20:26:33
平均每條線有多少站? – 2011-05-04 20:32:46