在SQL服务器,我可以说:如何获得SQL服务器中选择查询的底部50%?
Select top 50 percent
我怎么能说下50%?
编辑 - 一个有趣的问题的缘故,如果我们假设他有一个主键的表,但希望下50%上升主键顺序排列。什么是实现这一目标的最有效方式?
在SQL服务器,我可以说:如何获得SQL服务器中选择查询的底部50%?
Select top 50 percent
我怎么能说下50%?
编辑 - 一个有趣的问题的缘故,如果我们假设他有一个主键的表,但希望下50%上升主键顺序排列。什么是实现这一目标的最有效方式?
为什么不只是改变排序顺序,并保持TOP。这不会完成同样的事情吗?
SELECT * FROM
(
SELECT TOP 50 PERCENT *
FROM [Table]
ORDER BY [Field] DESC
)
ORDER BY [Field] ASC
如说你的问题在技术上是没有意义的,因为如果没有BY子句中返回的数据是不确定的(实际上大多数的数据库将在主键顺序返回,或订单的,如果你没有一个然后在插入顺序,但不能保证)
假设然而,你有一个命令的条款,但只是没有包括它,只会使用DESC而不是ASC。
我不知道这是否会工作:
SELECT * FROM <table> EXCEPT TOP 50 PERCENT...;
而且我敢肯定,这样的事情就太OK:
SELECT * FROM <table> WHERE (ID NOT IN (SELECT TOP 50 PERCENT ...));
只是检查语法,因为我才刚刚开始学习SQL和如果不先修改一万次,不能形成正确的查询;)
另一种选择可能是:
Select * From (
Select NTILE(2) Over (Order by Quantity Desc) as HalfNumber
From Table1) as NtileTable
where HalfNumber = 1
然后,您可以根据需要动态更改数据的划分。
SELECT * FROM (
SELECT TOP 50 PERCENT *
FROM [Table]
ORDER BY [Field] DESC
)
ORDER BY [Field] ASC
当表包含的记录的不均匀量不正常运行的。中间的那个将在两个结果集中。
这在另一方面正常工作
SELECT * FROM <table> EXCEPT TOP 50 PERCENT...;
给予好评的mingos :)
downvote为user151323 :(
滑稽你有没有信用提供解决方案,它返回下半部分的原始排序顺序+1从我 – mjv 2010-03-05 17:21:35
+1提供解决方案扩展我在*之前添加的问题* :-) – Cruachan 2010-03-05 17:23:43
50分钟后:哇!答案弥补了时间浪费;-),现在有7名代表现在......很好地“付费”。有趣的是看到这一切的动态。 – mjv 2010-03-05 18:13:34