Для вашего дела ORDER BY id
будет достаточно.
SELECT Id
FROM MyTable
WHERE SKU IN (112,223,445, 456, 678)
ORDER BY id
Для общего подхода можно использовать JOIN
с производной таблицы, как:
Demo
SELECT m.Id
FROM MyTable m
JOIN (VALUES (1, 112) ,(2,223) ,(3,445), (4,456), (5,678)) AS t(num, SKU)
ON m.SKU = t.SKU
ORDER BY t.num
Если вы используете SQL Server 2008 можно использовать UNION ALL
:
Demo2
;WITH cte AS
(
SELECT 112 AS SKU, 1 AS orderNum
UNION ALL
SELECT 223 AS SKU, 2 AS orderNum
UNION ALL
SELECT 445 AS SKU, 3 AS orderNum
UNION ALL
SELECT 456 AS SKU, 4 AS orderNum
UNION ALL
SELECT 678 AS SKU, 5 AS orderNum
)
SELECT m.Id
FROM #MyTable m
JOIN cte c
ON m.SKU = c.SKU
ORDER BY c.orderNum;
Общий подход, который не заставит вас создавать пользовательские запросы, вы можете использовать временную таблицу с IDENTITY
колонки как:
Demo3
CREATE TABLE #mySKU(orderNum INT IDENTITY(1,1), SKU INT);
INSERT INTO #mySKU
VALUES (112),(223),(445), (456), (678);
SELECT m.Id
FROM #MyTable m
JOIN #mySKU c
ON m.SKU = c.SKU
ORDER BY c.orderNum;
«Если я пишу: ... Я не получаю результат как ...», но вы должны, если инструкция «Вот моя таблица: MyTable» верна. В вашем вопросе, очевидно, не хватает разъяснений о том, что у вас «действительно есть» и что вы «действительно хотите» в результате. – pkuderov
Вкратце: нет. Если значения в списке «IN» выбраны из другого источника данных, например. таблицу или представление, и вы можете получить подходящий рейтинг из них, вы можете применить его отдельно, например. через подходящие 'JOIN' и' ORDER BY'. – HABO
Спасибо всем за ответы. – user123456