SQL Server Order By(从表中选择子句)

时间:2016-04-21 11:09:56

标签: sql-server tsql sql-order-by

我在下面有这个查询,它编译并运行但不执行排序工作。

declare @sort table (sort varchar (500))
insert into @sort values ('Code DESC')

SELECT * FROM  Registry
ORDER BY (select sort from @sort)

方法可以吗?

如果我需要从表中选择order by子句,其中存储的字符串可以是选项,或者这是一个失败的原因。

实际上我有一个包含各种位值(6列位值)的排序表,并且在CASE WHEN中使用那些排列是不可理解的,我不能使用动态SQL

1 个答案:

答案 0 :(得分:0)

你需要在这里做动态SQL。尝试下面的代码

declare @sort table (sort varchar (500), orderCol int)
insert into @sort values ('Code DESC', 1),('Name DESC', 2)

DECLARE @query varchar(max);
SET @query= 'SELECT * FROM  Registry ORDER BY '+ 
SELECT Stuff((select N', ' + sort from @sort order by orderCol ASC FOR XML PATH(''),TYPE).value('text()[1]','nvarchar(max)'),1,2,N'')
EXEC(@query)

如果您的表中有多个条目用于排序,您还应该考虑在表中存储排序顺序。

select t.date, sum(t.value) OVER(ORDER BY t.date ROWS BETWEEN 2 PRECEDING AND 0 FOLLOWING) as Pre_3row_sum
from table_name t