2015-01-08 2 views
2

Я пытаюсь сделать заказ по столбцам из другой таблицы, Вот пример ошибки я получаюSQL Server 2008 упорядочить по вопросу

DECLARE @UserID1 varchar(31), @UserID2 varchar(31), @UserID3 varchar(31), @UserID4 varchar(31) 

--getting data from table 
SELECT @UserID1 = ID1, @UserID2 = ID2, @UserID3 = ID3, @UserID4 = ID4 
FROM USER_INFO 
WHERE idref = @id 

--select some data from another table with the values we got from USER_INFO table 
SELECT age, name, location 
FROM USER_DATA 
WHERE NameId in(@UserID1, @UserID2, @UserID3, @UserID4) 
ORDER BY @UserID1, @UserID2, @UserID3, @UserID4 -- this errors 

Возвращается ошибка

Выбор элемента идентифицирован посредством ORDER BY, номер 1 содержит переменную как часть выражения, идентифицирующего позицию столбца. Переменные допускаются только при заказе с помощью выражения, ссылающегося на имя столбца.

Я пытаюсь сделать заказ на ID1, ID2, ID3, ID4 ИЗ USER_INFO в порядке возрастания

ответ

2

Вы можете сделать это следующим образом:

SELECT age, name, location 
FROM USER_DATA 
WHERE NameId in(@UserID1, @UserID2, @UserID3, @UserID4) 
ORDER BY CASE NameId 
    WHEN @UserID1 THEN 1 
    WHEN @UserID2 THEN 2 
    WHEN @UserID3 THEN 3 
    WHEN @UserID4 THEN 4 
END 

Это поместит записи с NameId соответствия @UserID1 сначала, затем записи с NameId соответствия @UserID2, затем @UserID3 и т. Д.

0
SELECT age, name, location 
FROM USER_DATA UD 
INNER JOIN USER_INFO UI 
ON (UD.NameId=UI.ID1 OR UD.NameId=UI.ID2 OR UD.NameId=UI.ID3 OR UD.NameId=UI.ID4) 
WHERE UI.idref = @id 
AND NameId in(ID1, ID2, ID3, ID4) 
ORDER BY ID1, ID2, ID3, ID4 

ИЛИ

SELECT age, name, location 
FROM USER_DATA UD 
, USER_INFO UI 

WHERE UI.idref = @id 
AND NameId in(ID1, ID2, ID3, ID4) 
ORDER BY ID1, ID2, ID3, ID4 
Смежные вопросы