如何在通过ID选择时保存项目的顺序?
我有ID如ids={1000,50,300,40}
我whant选择一些项目进行从数据库表中ID的一些查询,我要保存项目的顺序accordind到IDS的序列。 我的意思是,我使用select statment:如何在通过ID选择时保存项目的顺序?
SELECT *
FROM items
WHERE id IN (1000,50,300,40)
而且我想获得结果作为
id name
-------------
1000 item1
50 item2
300 item3
40 item4
但SQL返回结果为
id name
-------------
40 item4
50 item2
300 item3
1000 item1
它保存是非常重要的ids的顺序。有谁能够帮助我?
我能想到的唯一的事情就是开发或发现一些列将在正确的顺序,或联盟追加一系列由单个ID查询,这将导致每个查询结果返回的对象,在秩序,所有以前的结果集。
发生这种情况的原因是SQL引擎正在执行索引或表扫描以查找记录,并且由于记录通常按其ID的顺序存储,所以这是默认顺序,它会查找它们并将它们添加到结果集。
是的,这是我想要的东西,但我不知道如何一些列添加到我的结果,以及如何生成该列一些数字! – Kate 2011-03-01 17:08:42
您可以在您的选择列表中尝试包括@@ RowNum或@@ Identity。如果有曾经在SQL引擎完全基于IN子句为了拉动记录的阶段,它只是重新排序的结果集索引顺序,你也许能够通过保持秩序的轨道覆盖重新排序,其中结果被放入结果集中。 – KeithS 2011-03-01 17:17:47
...但是,我怀疑你可以这样做。我认为最简单的方法是在一系列UNIONed语句中单独搜索记录,或者在本机代码中跟踪ID的顺序,并且在将结果写入内存对象后,将它们放入以相同的顺序收集。 – KeithS 2011-03-01 17:19:49
BY子句订单添加到查询与ASC或DESC为升序或降序进行排序。
select * from items where id in (1000,50,300,40) order by id
完全不是他之后的事......请在回答之前阅读。 – JNK 2011-03-01 16:52:29
这不会按照请求在where子句中产生id的顺序,而是正是OP所要求的id的自然顺序。 – 2011-03-01 16:54:08
假设的SQL Server 2000+,使用CASE表达式:
SELECT i.*
FROM ITEMS i
WHERE i.id IN (1000,50,300,40)
ORDER BY CASE i.id
WHEN 1000 THEN 1
WHEN 50 THEN 2
WHEN 300 THEN 3
WHEN 40 THEN 4
ELSE 5
END
+1 比我的好多了。 – 2011-03-01 16:54:49
事实上,我有超过4个ID在“进”的陈述,我不知道IDS的先验值。 – Kate 2011-03-01 17:05:49
@Kate:对不起,SQL是声明式的 - 没有可用的动态/隐式/自然排序。动态ORDER BY需要动态SQL ... – 2011-03-01 17:09:49
你也有一个如何进行参数的in
条款的问题。如果你在SQL Server 2008上,你可以使用表值参数。你可以使用一个2列TVP既与order by
列和value
列,然后加入到这一点。
对于以前的版本,您可以使用split
表值函数返回2列(index
和value
)并加入到该列。
SELECT i.*
FROM dbo.split('1000,50,300,40') s
JOIN items i ON i.id = s.value
ORDER BY s.idx
这种功能的例子is here。我并不赞同这个特定的实施方式,因为有probably far better ones,但是您可以使用它来查看一般方法。
我相信你的意思是'ORDER BY s.index'。 – 2011-03-02 12:59:18
@Andriy - 是的。谢谢你让我知道。 – 2011-03-02 13:02:43
使用
select * from items WHERE id IN (1000,50,300,40) order by id desc
这就是OP不想要的相反顺序。他想要的订单是1000,50,300,40,而不是1000,300,50,40。 – 2011-03-02 03:38:14
说实话,我严重质疑不知道任何进一步的细节此要求的重要性。保留所请求的ID的顺序可能只是更普遍的设计问题的症状。只是我的两分钱... – 2011-03-01 16:58:05
什么版本的SQL Server? – 2011-03-01 17:07:26
的MS SQL Server 2005 – Kate 2011-03-02 13:43:05