2015-10-05 2 views
0

У меня есть оператор select, в котором я использую в статье.Можно ли выбрать записи по порядку в разделе?

Вот мой стол: MyTable

Id  SKU 
1  112 
2  223 
3  445 
4  456 
5  678 

Если я пишу:

SELECT Id 
FROM MyTable 
WHERE SKU IN (112,223,445, 456, 678) 

Я не получает результат, как

1 
2 
3 
4 
5 

Есть ли способ, чтобы получить на основе выбора результата по порядку предметов в разделе in.?

+0

«Если я пишу: ... Я не получаю результат как ...», но вы должны, если инструкция «Вот моя таблица: MyTable» верна. В вашем вопросе, очевидно, не хватает разъяснений о том, что у вас «действительно есть» и что вы «действительно хотите» в результате. – pkuderov

+1

Вкратце: нет. Если значения в списке «IN» выбраны из другого источника данных, например. таблицу или представление, и вы можете получить подходящий рейтинг из них, вы можете применить его отдельно, например. через подходящие 'JOIN' и' ORDER BY'. – HABO

+0

Спасибо всем за ответы. – user123456

ответ

-1

Для вашего дела 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; 
+0

Что делать, если значения skus являются динамическими? Как мы можем использовать общий подход? – user123456

+0

@ user123456 Если SKU являются динамическими, а не IN ('a', 'b', 'c'), вам нужно создать пары значений для JOIN, например '((1, 'a'), (2, 'b',) , (3, 'c')) ' – lad2025

+0

** Для downvoters я буду рад узнать, что не так с предлагаемым решением ** – lad2025

-1

«Есть ли способ, чтобы получить выбрать результат, основанный на заказе предметов в разделе «?»?

Для этого конкретного вопроса ответ нет.

Смежные вопросы