Для SQL Server 2005 я бы порекомендовал использовать табличные переменные и частично строить данные по мере необходимости.
Для этого создайте табличную переменную, которая представляет ваш конечный набор результатов, который вы хотите отправить пользователю.
Затем найдите вашу основную таблицу (скажем, таблицу заказов в приведенном выше примере) и извлеките эти данные, а также немного дополнительных данных, например, одно соединение (имя клиента, название продукта). Вы можете сделать SELECT INTO, чтобы поместить это прямо в переменную таблицы.
Оттуда итерируйте таблицу и для каждой строки выполните несколько небольших запросов SELECT, которые извлекают все дополнительные данные, необходимые для набора результатов. Вставьте их в каждый столбец по ходу дела.
После завершения вы можете сделать простой SELECT * из вашей табличной переменной и вернуть этот набор результатов пользователю.
У меня нет для этого точных чисел, но я до сих пор работал над тремя отдельными случаями, когда выполнение этих небольших запросов фактически работало быстрее, чем выполнение одного массивного запроса select с кучей объединений. 1011 *