以ASC顺序从SQLServer获取数据

时间:2017-04-12 06:19:33

标签: c# sql-server visual-studio

我有一个包含列名id和值的表。当数据保存在sql server数据库中时,它按随机顺序排序,即id值1,2,3,4,5,6,7,14,15,16,17,8,9,10等。

我需要检索4组中的数据,每组包含11个asc id顺序的数据,

第1组:1-11 第2组:12-22 第3组:23-33 第4组:33-44

我尝试了查询

组1:通过id ASC从tblCode顺序中选择top(11)*

第2组:SELECT top(22)* FROM tblCode除了从id ASC的tblCode顺序中选择top(11)*

组3:SELECT top(33)* FROM tblCode,除了从id ASC的tblQRCode顺序中选择top(22)*

第4组:SELECT top(44)* FROM tblCode,除了从id ASC的tblCode顺序中选择top(33)*

我的问题是什么,因为数据是在将数据保存到数据库中时随机排序的,它们是随机检索的。

以下是我的数据如何保存在数据库中的屏幕截图。

Screenshot 帮我选择上面提到的数据组。

4 个答案:

答案 0 :(得分:4)

使用OFFSET and FETCH而不是TOP

E.g。第二组是:

select *
from tblCode
order by id ASC
offset 11 rows
fetch next 11 rows only

完整的repro脚本:

declare @t table (ID int not null, Value varchar(93) not null);
;With Numbers as (
    select ROW_NUMBER() OVER (ORDER BY so1.object_id) as n
    from sys.objects so1,sys.objects so2,sys.objects so3
)
insert into @t (ID,Value)
select n,'PEC-' + CONVERT(varchar(93),n)
from Numbers
where n between 1 and 1000

select *
from @t
order by id ASC
offset 11 rows
fetch next 11 rows only

结果:

ID          Value
----------- ---------
12          PEC-12
13          PEC-13
14          PEC-14
15          PEC-15
16          PEC-16
17          PEC-17
18          PEC-18
19          PEC-19
20          PEC-20
21          PEC-21
22          PEC-22

答案 1 :(得分:0)

这也可以得到您想要的结果。对于其他查询,使用其他值更改33,现在它从33到22获取值。

WITH t AS
( SELECT ROW_NUMBER() OVER (ORDER BY id) AS row_num, *
    FROM tblCode )
SELECT TOP 11 *
FROM t
WHERE row_num > 33

答案 2 :(得分:0)

试试这个,

select * from Table Name Order by ID

答案 3 :(得分:0)

我希望我不会误解:

--Group 1
SELECT *
FROM tblCode
WHERE id >= 1
    AND id <= 11
ORDER BY id ASC

--Group 2
SELECT *
FROM tblCode
WHERE id >= 12
    AND id <= 22
ORDER BY id ASC

--Group 3
SELECT *
FROM tblCode
WHERE id >= 23
    AND id <= 33
ORDER BY id ASC

您还可以将增量保存在变量中。也许这样的事情(即)你发送param group no 3:

--Group 3
SELECT @Group = 3 --just for sample, param should sent From application 
SELECT @lastIndex =  3*11
SELECT @indexStart = @lastIndex - 10
SELECT *
FROM tblCode
WHERE id >= @indexStart
    AND id <= @lastIndex
ORDER BY id ASC