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