在条款问题

时间:2015-06-04 09:55:05

标签: sql-server

我一直在执行简单的3 sql查询

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="moment.js"></script>
<script type="text/javascript" src="daterangepicker.js"></script>
<link rel="stylesheet" type="text/css" href="bootstrap.css" />
<link rel="stylesheet" type="text/css" href="daterangepicker-bs3.css" />  

所有Query返回相同的结果。意味着首先在(1,2,3)中执行Query,所以得到像

这样的结果

1)首先记录哪个rowid为1

2)第二个记录哪个rowid是2

3)第三个记录哪个rowid是3

与其他查询相同。

如果我调用第二个和第三个Query,结果与第一个Query相同,但我希望通过rowid调用序列得到结果。

2 个答案:

答案 0 :(得分:1)

您需要ORDER BY

SELECT * FROM Table where rowid in(1,2,3) ORDER BY rowid ASC
SELECT * FROM Table where rowid in(2,1,3) ORDER BY 
(
  CASE rowid 
    WHEN 2 
    THEN 1 
    WHEN 1 
    THEN 2 
    WHEN 3 
    THEN 3 
  END
)
SELECT * FROM Table where rowid in(3,2,1) ORDER BY rowid DESC

答案 1 :(得分:0)

当服务器基本上为每一行执行查询时,确定它是否满足where子句 - 因此where子句仅确定如果该行在结果集,而不是它的位置。

由于这些表实际上是一个集合,因此没有行的内在排序(任何顺序都应该被认为是偶然的),如果您需要order明确需要的有序数据by您想要排序的字段,即

SELECT * 
FROM Table 
WHERE rowid in(2, 1, 3)
ORDER BY rowid