This is a relational division: link 1 , link 2 .
If the divider table (only food and drink ) is static, you can use one of these solutions:
DECLARE @OrderDetail TABLE ([OrderID] int, [Name] varchar(8), [Type] varchar(8), [Price] decimal(10,2)) ; INSERT INTO @OrderDetail ([OrderID], [Name], [Type], [Price]) SELECT 1, 'Broccoli', 'Food', 1.0 UNION ALL SELECT 1, 'Beer', 'Beverage', 5.0 UNION ALL SELECT 1, 'Coke', 'Beverage', 2.0 UNION ALL SELECT 2, 'Beef', 'Food', 2.5 UNION ALL SELECT 2, 'Juice', 'Beverage', 1.5 UNION ALL SELECT 3, 'Beer', 'Beverage', 5.0 UNION ALL SELECT 4, 'Tomato', 'Food', 1.0 UNION ALL SELECT 4, 'Apple', 'Food', 1.0 UNION ALL SELECT 4, 'Broccoli', 'Food', 1.0
Results (for solutions 1 and 2):
OrderID DistinctTypeCount MaxBeveragePrice ----------- ----------------- --------------------------------------- 1 2 5.00 2 2 1.50 Table 'Worktable'. Scan count 2, logical reads 23, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table '#09DE7BCC'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. OrderID MaxFoodPrice MaxBeveragePrice ----------- --------------------------------------- --------------------------------------- 1 1.00 5.00 2 2.50 1.50 Table '#09DE7BCC'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.