SQL Server 2005相当于OFFSET / FETCH [重复]
Posted
技术标签:
【中文标题】SQL Server 2005相当于OFFSET / FETCH [重复]【英文标题】:SQL Server 2005 equivalent of OFFSET / FETCH [duplicate] 【发布时间】:2012-12-25 05:19:57 【问题描述】:可能重复:LIMIT 10..20 in sqlserver
我尝试在 SQL Server 2005 中使用以下代码(写于 2012 年):
SELECT *
FROM (SELECT TOP (100) PERCENT ID_BADGE,
DATE_TRX,
CODE_TRX,
SEQ_REC
FROM omi.DCUTRX_ZERO
UNION ALL
SELECT TOP (100) PERCENT ID_BADGE,
DATE_TRX,
CODE_TRX,
SEQ_REC
FROM omi.TAHIST_ZERO) OMI
WHERE ( ID_BADGE = ' ' + @Badge )
AND ( DATE_TRX BETWEEN @Date AND @Date2 )
AND ( SEQ_REC IN ( '0', '1000' ) )
AND ( CODE_TRX IN ( '100', '101' ) )
OFFSET 1 ROWS
FETCH NEXT 2 ROWS ONLY
谁能告诉我相当于 SQL Server 2005 的版本?
【问题讨论】:
请看sqlservercentral.com/articles/T-SQL/66030和所有后续讨论sqlservercentral.com/Forums/Topic672980-329-1.aspx 【参考方案1】:SELECT ID_BADGE, DATE_TRX, CODE_TRX, SEQ_REC
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY DATE_TRX) rn
FROM (
SELECT ID_BADGE, DATE_TRX, CODE_TRX, SEQ_REC
FROM omi.DCUTRX_ZERO
UNION ALL
SELECT ID_BADGE, DATE_TRX, CODE_TRX, SEQ_REC
FROM omi.TAHIST_ZERO
) q
WHERE ID_BADGE = ' ' + @Badge
AND DATE_TRX BETWEEN @Date AND @Date2
AND SEQ_REC IN ('0', '1000')
AND CODE_TRX IN ('100', '101')
) q
WHERE rn BETWEEN 2 AND 3
ORDER BY
DATE_TRX
请注意,您需要 SQL Server 中的某种ORDER BY
才能使ROW_NUMBER
工作。
【讨论】:
以上是关于SQL Server 2005相当于OFFSET / FETCH [重复]的主要内容,如果未能解决你的问题,请参考以下文章
SQL2012分页offset fetch 比较SQL2005/2008的ROW_Number
在 SQL Server 2005 中使用 ROW_NUMBER() OVER () 对不同列进行排序的分页查询
在 SQL Server 2005 中使用 ROW_NUMBER() OVER () 对不同列进行排序的分页查询
如果存在可在 SQL Server 2005 和 SQL Server Compact 3.5 中使用的索引,则删除该索引的脚本