SQL Server 2008 R2使用ORDER BY子句中的CASE..WHEN进行字符串连接

时间:2014-08-06 08:07:18

标签: sql-server-2008-r2

在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变量中排序,不是吗? 当然我可以先在第二个表中选择我的记录来对它们进行排序,然后进行连接,但我更愿意这样做一次!

感谢。

0 个答案:

没有答案