我正在尝试按另一个表中的列进行排序,这是我得到错误的一个例子
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按升序排序
答案 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