Причудливая сортировка по условию (больше 300 условий в запросе)

Есть выполненный запрос с таблицы 1DataSet1), в котором у каждой строки (а их более 300) есть ID. Строки с ID расположены НЕ по порядку (после сортировки пользователя).
Есть таблица 2, в которой строки привязаны к таблице 1 (по ID), т.е. связь один ко многим.
Вопрос:
Каким образом, можно не дергая заново запрос к таблице 1DataSet1), выполнить выборку из таблицы 2 (DataSet2), чтобы записи в DataSet2, были упорядочены в порядке поля ID (DataSet1). (Чтоб вывести информацию в Word, на основании результатов в двух DataSet).
Конструкции «order by» или «union all» не помогают, т.к. они расчитаны только до 255 параметров (столбцов результата), т.е выпадает ошибка. А у меня больше 300 строк в результате.

Можно конечно без сортировки, но тогда мне придется делать 300 циклов в DataSet2 (чтоб соотнести строки с двух DataSet), это как-то не очень хотелось бы…


Ответы (1 шт):

Автор решения: pegoopik

В общем я бы подумал в сторону записать это во временную таблицу, но не знаю какой контекст у задачи. А одним запросом можете попробовать конструктор таблиц:

WITH UserOrderCTE (UserOrder, DEVICE_ID_CL) AS (VALUES
  (1, 100),(2,300),(3,200),(4,500),(5,400)
)

--,CERTIFICATE(DEVICE_ID_CL) AS (VALUES(100),(200),(300),(400),(500))

SELECT U.UserOrder, C.DEVICE_ID_CL 
FROM CERTIFICATE C 
  JOIN UserOrderCTE U ON C.DEVICE_ID_CL = U.DEVICE_ID_CL
ORDER BY UserOrder

Если раскомментировать CERTIFICATE, получится следующее:

UserOrder DEVICE_ID_CL
1 100
2 300
3 200
4 500
5 400

Вот ещё посмотрите:

https://stackoverflow.com/questions/43913457/how-do-i-name-columns-in-a-values-clause/62718343

→ Ссылка