sql2000不支持Row_Number() over吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql2000不支持Row_Number() over吗相关的知识,希望对你有一定的参考价值。
select Row_Number() over (order by createDate desc) as rowId, * from test
提示:'Row_Number' 不是可以识别的 函数名。
在sql2000里面用什么可以代替Row_Number() over呢?
代码为
select rowId,id,[user_id],author,zhufu,contents,style,photo,createDate,topNum,leftNum
from
(
select Row_Number() over (order by createDate desc) as rowId, * from bless
where
(id=@id or @id=0) and
(author=@author or @author='') and
(zhufu=@zhufu or @zhufu='')and
(@month=0 or month(createdate)=@month)
)
as A where A.rowId >= @start and A.rowId <= @end
order by createDate ASC
怎么修改可以在sql2000里使用呢?
sql 2000不支持,sql 2005及更高版本可以支持。
sql 2000 可以使用临时表配合 identity函数来实现类似功能
(id=@id or @id=0) and
(author=@author or @author=\'\') and
(zhufu=@zhufu or @zhufu=\'\')and
(@month=0 or month(createdate)=@month)
order by createDate desc
select rowId,id,[user_id],author,zhufu,contents
,style,photo,createDate,topNum,leftNum
from #tb A
where A.rowId >= @start and A.rowId <= @end
order by createDate ASC
drop #tb
2000要使用类似功能用identity
select Identity(int,0,1) as RowId,* into #temp from Table_1
select * from #temp 参考技术B row_number() 是Sql 2005 提供的新函数
如果你是为了分页 你可以使用top
如果你是为了统计 可以使用 group by本回答被提问者和网友采纳 参考技术C sql2000用子查询
select
(select count(1)+1 from test where createDate>t.createDate) as rowId, *
from test t
SQL Server:row_number 分区不重置计数器
【中文标题】SQL Server:row_number 分区不重置计数器【英文标题】:SQL Server : row_number partition does not reset counter 【发布时间】:2021-06-22 13:26:54 【问题描述】:在下面的数据中,d1 更改为 d2,然后返回 d1,分区在 d 列上,因此分区正确地从第 2 行的 d1->d2 重置并且 rn = 1。我希望分区也可以重置d2->d1,即记录#3 也应该有 rn = 1。
如何解决这个问题?
SELECT
t.*,
rn = ROW_NUMBER() OVER (PARTITION BY d ORDER BY id)
FROM
(VALUES (1, 'd1'), (2, 'd2'), (3, 'd1')) t (id, d)
ORDER BY
id
【问题讨论】:
那是正确的;那是值d1
的 2nd 行;第一个是id
的值为1
。
那么分区的顺序是什么。 d 列发生变化,因此它也必须是第三行的新分区
对数据进行分区...它完全按照它说的做,将数据分组。在这种情况下,d
的每个不同值对应 1 个组,d
、'd1'
和 'd2'
和 3 行只有两个不同的值,因此其中一行的值为 2 ;特定值的第二行。在这种情况下,当id
的值为3
时,这就是值'd1'
的第2 行。它的工作方式与预期完全一致,并且符合记录。
您可以将整体 row_number() - 1
除以 2 以获得分组的行号
【参考方案1】:
猜测您想在每次d
的值更改时以id
的值排序数据时开始行号,这与行号不相同每个 d
的值。如果是这种情况,一种方法如下:
SELECT id,
d,
ROW_NUMBER() OVER (ORDER BY id ASC) -
ROW_NUMBER() OVER (PARTITION BY d ORDER BY id ASC) AS RN
FROM dbo.YourTable;
【讨论】:
这会为第 2 行和第 3 行返回 1,我正在寻找每次值从上一行更改时重置的东西。【参考方案2】:这可以完成工作,但看起来太笨重了。
select
t.*,
lagd=lag(d) over (order by id),
change= (case when d= (lag(d) over (order by id)) then 0 else 1 end)
FROM (VALUES (1,'d1' ),
(2,'d2' ),
(3,'d1' ),
(4,'d2' ),
(5,'d2' )
) t (id, d)
order by id
【讨论】:
以上是关于sql2000不支持Row_Number() over吗的主要内容,如果未能解决你的问题,请参考以下文章
将查询从 SQL Server 转换为 Access 2000
08001 - SQL Server Native Client 11.0 不支持连接到SQL Server 2000或更早的版本。
VS 2015 IDE 不支持 MS SQL 2000 生成 dbml