sql server 2008 ordre par numéro

J'essaye de order par des colonnes d'une autre table, heres un exemple de l'erreur que j'obtiens

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 

L'erreur renvoyée est

L'élément SELECT identifié par le numéro ORDER BY 1 contient une variable faisant partie de l'expression identifiant une position de colonne. Les variables ne sont autorisées que lors d'une command par une expression référençant un nom de colonne.

J'essaye de order par ID1, ID2, ID3, ID4 FROM USER_INFO dans l'ordre croissant

Vous pouvez le faire de cette façon:

 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 

Cela mettra les loggings avec NameId correspondant @UserID1 abord, puis enregistre avec NameId correspondant @UserID2 , puis @UserID3 , et ainsi de suite.

 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 

OU

 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