Hello everyone.Suppose I have two lists of quotes that model outbound and inbound legs of possible trips. Each list is a collection of 2 tuples, (or key value) of DepartureDateTime and Quote. I want to roll up those lists and produce a header row showing the *cheapest* possible combination (a trip that you could actually make based on the outbound dates and inbound dates)Example:Possible Outbounds ( ('2011-01-01T12:00:00', 100) , ('2011-01-01T15:00:00', 75) )Possible Inbounds ( ('2011-01-01T14:00:00', 50) , ('2011-01-01T16:00:00', 150) )The result I want in this case is:Results [Outbound, Inbound, TotalPrice] ( ('2011-01-01T12:00:00', '2011-01-01T14:00:00', 150) )Here the cheapest possible combined quote is 150 (100 + 50)Now as the lists get large this kind of operation gets expensive if you do it the nieve way (cross join everything possible and then take the minimum).Does anyone have a better way than the second way illustrated in this example?SET NOCOUNT ON/*-- Create Data SetIF OBJECT_ID('tempDb..#outBoundList') IS NOT NULL DROP TABLE #outBoundListCREATE TABLE #outBoundList ( [OutboundDateStamp] DATETIME PRIMARY KEY , [Price] SMALLMONEY )IF OBJECT_ID('tempDb..#inBoundList') IS NOT NULL DROP TABLE #inBoundListCREATE TABLE #inBoundList ( [InboundDateStamp] DATETIME PRIMARY KEY , [Price] SMALLMONEY )-- Populate Outbound ListINSERT #outBoundList ([OutboundDateStamp], [Price])SELECT DATEADD(SECOND, ABS(CAST(CAST(NEWID() AS VARBINARY(32)) AS INT)), '19700101') , CAST(ABS(CAST(CAST(NEWID() AS VARBINARY(16)) AS SMALLINT)) AS SMALLMONEY)FROM ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS a CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS b CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS c CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS d CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS e CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS f CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS g CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS h CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS i CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS j CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS k CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS lINSERT #inBoundList ([InboundDateStamp], [Price])SELECT DATEADD(SECOND, ABS(CAST(CAST(NEWID() AS VARBINARY(32)) AS INT)), '19700101') , CAST(ABS(CAST(CAST(NEWID() AS VARBINARY(16)) AS SMALLINT)) AS SMALLMONEY)FROM ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS a CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS b CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS c CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS d CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS e CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS f CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS g CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS h CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS i CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS j CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS k CROSS JOIN ( SELECT 1 AS [a] UNION SELECT 2 AS [b] ) AS l--SELECT * FROM #outBoundList--SELECT * FROM #inBoundList*/-- Find the absolute best price possible by Cross Joining all possible combinationsSELECT TOP 1 o.[OutboundDateStamp] , i.[InboundDateStamp] , o.[Price] + i.[Price] AS [Cheapest Possible Price]FROM #outBoundList AS o JOIN #inBoundList AS i ON i.[InboundDateStamp] > o.[OutboundDateStamp]ORDER BY o.[Price] + i.[Price] ASC-- ALternative method b (produce Candidate Lists)-- Produce Candidate ListsDECLARE @bestOutbounds TABLE ([OutboundDateStamp] DATETIME PRIMARY KEY, [Price] SMALLMONEY)DECLARE @bestInbounds TABLE ([InboundDateStamp] DATETIME PRIMARY KEY, [Price] SMALLMONEY)-- Shorten the listsINSERT @bestOutbounds ([OutboundDateStamp], [Price])SELECT o.[OutboundDateStamp], o.[Price]FROM #outBoundList AS oWHERE NOT EXISTS ( SELECT 1 FROM #outBoundList AS o2 WHERE o2.[OutboundDateStamp] < o.[OutboundDateStamp] AND o2.[Price] <= o.[Price] )INSERT @bestInbounds ([InboundDateStamp], [Price])SELECT i.[InboundDateStamp], i.[Price]FROM #inBoundList AS iWHERE NOT EXISTS ( SELECT 1 FROM #inBoundList AS i2 WHERE i2.[InboundDateStamp] > i.[InboundDateStamp] AND i2.[Price] <= i.[Price] )-- Then get the best price from the shortened listsSELECT TOP 1 o.[OutboundDateStamp] , i.[InboundDateStamp] , o.[Price] + i.[Price] AS [Cheapest Possible Price]FROM @bestOutbounds AS o JOIN @bestInbounds AS i ON i.[InboundDateStamp] > o.[OutboundDateStamp]ORDER BY o.[Price] + i.[Price] ASCCharlie===============================================================Msg 3903, Level 16, State 1, Line 1736The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION