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