Нельзя упорядочить по результатам, основанным непосредственно на порядке предложения IN
.
Что вы можете сделать, это что-то вроде этого:
SELECT SUM(amount) as SumAm
FROM products
WHERE number IN ('M6412', 'M6545')
GROUP BY number -- You must group by to get a row for each number
ORDER BY CASE number
WHEN 'M6412' THEN 1
WHEN 'M6545' THEN 2
END
Конечно, чем больше элементов в вашем предложении IN
, тем более громоздким будет этот запрос. Поэтому может оказаться более практичным другое решение - присоединение к табличной переменной вместо использования IN
:
DECLARE @Numbers AS TABLE
(
sort int identity(1,1), -- this will hold the order of the inserted values
number varchar(10) PRIMARY KEY -- enforce unique values
);
INSERT INTO @Numbers (number) VALUES
('M6412'),
('M6545')
SELECT SUM(amount) as SumAm
FROM products As p
JOIN numbers As n ON p.Number = n.Number
-- number and sort have a 1 - 1 relationship,
-- so it's safe to group by it instead of by number
GROUP BY n.sort
ORDER BY n.sort