Сделайте это ленивым способом, и пусть Sql Server выдаст вам результаты.Например, предположим, что ваш исходный запрос был примерно таким:
SELECT OrderDate, OrderId, CustomerName, OrderValue
FROM OrderTable
WHERE (OrderDate >= @DateFrom) AND (OrderDate <= @DateTo)
Объедините его с сгруппированными результатами за день, чтобы они отображались в каждой строке:
SELECT DT.OrderDate, DT.OrderId, DT.CustomerName, DT.OrderValue,
GT.OrderId AS MaxOrderId, GT.CustomerName AS MaxCustomerName, GT.OrderValue AS MaxOrderValue
FROM
(SELECT OrderDate, OrderId, CustomerName, OrderValue
FROM OrderTable
WHERE (OrderDate >= @DateFrom) AND (OrderDate <= @DateTo)) AS DT
INNER JOIN
(SELECT OrderDate, OrderId, CustomerName, OrderValue
FROM OrderTable AS OrderTable_1
WHERE (OrderDate >= @DateFrom) AND (OrderDate <= @DateTo) AND (OrderId =
(SELECT TOP 1 OrderId
FROM OrderTable AS OrderTable_2
WHERE (OrderDate = OrderTable_1.OrderDate)
GROUP BY OrderId
ORDER BY SUM(OrderValue) DESC))) AS GT ON DT.OrderDate = GT.OrderDate
ORDER BY DT.OrderDate, DT.OrderValue DESC
DT =Подробная таблица
GT = Таблица результатов группы
Порядок максимальных значений для дня теперь добавляется в каждую строку, что позволяет легко включать его в заголовки группы.Очевидно, что если CustomerName происходит из другой таблицы, вам просто нужно объединить эту таблицу в исходном запросе и в запросе OrderTable_1.
В этом запросе предполагается, что поле OrderDate является полем чистой даты без компонента времени,