在ORDER BY子句中使用CASE..WHEN时,我有一种奇怪的行为。这是:
create table #test(num int,val nvarchar(30))
insert into #test select 1,'VAL1'
insert into #test select 2,'VAL2'
insert into #test select 3,'VAL3'
insert into #test select 4,'VAL4'
declare @TmpLib nvarchar(max)
select @TmpLib=''
SELECT @TmpLib = @TmpLib+ t.val
FROM #test t
ORDER BY t.num
select @TmpLib
在这种情况下,我的结果是VAL1VAL2VAL3VAL4
但是如果我像这样更改ORDER BY子句
ORDER BY CASE WHEN t.num=1 THEN 0 WHEN t.num=2 THEN 98 WHEN t.num>=3 AND t.num<4 THEN 99 ELSE 1 END, t.num
然后结果是VAL3。
我不明白ORDER BY子句如何影响这样的连接。我希望我的所有值仍然在我的@TmLib变量中排序,不是吗? 当然我可以先在第二个表中选择我的记录来对它们进行排序,然后进行连接,但我更愿意这样做一次!
感谢。