sql server 2008按问题排序

时间:2015-01-08 02:21:47

标签: sql sql-server 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标识的SELECT项包含a   变量作为标识列位置的表达式的一部分。   只有在通过表达式引用进行排序时,才允许使用变量   列名。

我尝试按ID1,ID2,ID3,ID4从USER_INFO按升序排序

2 个答案:

答案 0 :(得分: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的记录,依此类推。

答案 1 :(得分: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