在SQL Server中对SELECTed行进行排序

时间:2013-06-14 03:13:51

标签: c# sql sql-server

我想知道是否有一种方法来获取行不是由表中的列排序(所以没有简单的选项来使用ORDER BY或类似的东西。)我试过两个

SELECT *
FROM table
WHERE column IN ('A', 'B', 'C')

SELECT *
FROM table
WHERE column = 'A' OR column = 'B' OR column = 'C'

然后,我的C#应用​​程序中的SqlDataReader按顺序显示行,如'C','A','B',它们(可能)按照数据库中写入的日期顺序显示。
我的意思不是字母顺序,而是每个变量本身在查询中显示的顺序。

作为SQL Server的初学者,我不容易详细搜索语法。另外,我在这里堆栈溢出很新,所以如果我犯了任何错误,请告诉我。如果你这样做,我将不胜感激 提前谢谢。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<无线电通信/>

我的坏。给出的例子有点含糊不清。让我提供一个更清楚的。

SELECT *
FROM table
WHERE column IN ('r2', 'r4', 'r3', 'r1')

我希望我的SqlDataReader对象首先读取'r2',然后选择'r4','r3'然后再读取'r1'。
应用程序通过使用循环查询每一行来执行此操作,我担心会损害性能。

3 个答案:

答案 0 :(得分:3)

SELECT *
FROM table
WHERE (...expression...)
order by
case
when column='r2' then 1
when column='r4' then 2
when column='r3' then 3
when column='r1' then 4
else 9 end,column

答案 1 :(得分:2)

在大多数情况下,如果未指定“order by”子句,SQL Server将根据聚簇索引返回结果。因此,您可能需要检查表上的主键或聚簇索引。

另一种选择是你可以添加一个正在运行的序列号列&amp;把它作为主键。

答案 2 :(得分:0)

尝试:

SELECT *
FROM table
WHERE column IN ('A', 'B', 'C')
ORDER BY column DESC

用C,B,A命令获取它。