精细控制SQL排序顺序

时间:2009-12-18 16:43:05

标签: sql sql-server ssrs-2008

我有一个由查询驱动的SQL报告,它按照某个数值的升序对其进行排序。但是,用户希望并发两个特定的数据行,这些数据恰好出现在查询结果中的不同序号位置。有没有办法通过报告的驱动SQL或.rdl文件本身来做到这一点?

3 个答案:

答案 0 :(得分:3)

只需将另一个计算表达式作为Expression的第一个顺序添加,将这两个值放在所有其他值之前......

Select [Other stuff]
From Table
Order By Case colName 
          When first_val then 0
          When second_val then 0
          else 1 End,
      colName 

或编辑(包括@ astander的建议)

Select [Other stuff]
From Table
Order By Case 
         When colName In (first_Val, second_Val)
         Then 0 else 1 End,
      colName 

和另一个编辑,在first_Val之后立即放置second_val ...

Select [Other stuff]
From Table
Order By Case 
         When colName < first_Val And colName <> secondVal Then 0
         When colName = first_Val Then 1
         When colName = secondVal Then 2 
         Else 3 End,
      colName 

答案 1 :(得分:0)

听起来你问这个:

select * from table where col1 = first_val or col1 = second_val;

其中first_val和second_val是用户想要返回的行的值。

如果那不是您要找的,请澄清您的问题。

答案 2 :(得分:-1)

此外,CURSORs是细粒度控制的好工具。我正在使用它,但我会看看是否可以通过使用ORDER BY CASE建议来删除迭代代码。