我在下面有这个查询,它编译并运行但不执行排序工作。
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
答案 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