发布网友 发布时间:2022-04-23 02:41
共5个回答
热心网友 时间:2023-10-12 03:12
就是按照某个列产生行号。。。,例子:
id type
11 a
2 b
3 c
14 d
5 f
SELECT name, id, type, ROW_NUMBER() OVER(ORDER BY id ASC) rk
FROM tab
result:
11 a 4
2 b 1
3 c 2
14 d 5
5 f 3
如果是按照id降序
SELECT name, id, type, ROW_NUMBER() OVER(ORDER BY id DESC) rk
FROM tab
result:
11 a 2
2 b 5
3 c 4
14 d 1
5 f 3追问你的 row_number 生成的列号为什么不是顺序的,我的是 1,2,3,4...
怎么回事
追答不同SQL system生成的可能有差异。关键理解了函数就可以了
热心网友 时间:2023-10-12 03:13
可以在单个查询中将多个排名或聚合开窗函数与单个 FROM 子句一起使用。
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
GO
USE AdventureWorks;
GO
SELECT SalesOrderID, ProctID, OrderQty
,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'
,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg'
,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count'
,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min'
,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max'
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN(43659,436);
GO追问大哥,我就是看不懂msdn的才来问的 是跟 ROW_NUMBER 一起用的
能不能来个简单的demo 加点通俗易的解释??
热心网友 时间:2023-10-12 03:13
over是用于数据的分区和排序,常用在函数后边使用
例如:
create table over_eg
(
row1 int,
row2 int
);
declare @int int;
set @int=1;
while @int<=50
begin
insert into over_eg values (@int,@int%5);
set @int=@int+1;
end
go
--按照row2进行分区,找出每个区里边最小的值
select min_row1=min(row1) over (partition by row2) ,row2 from over_eg;绝对是我自己的回答
热心网友 时间:2023-10-12 03:14
我空间里面有一个
排名或顺序的函数 ROW_NUMBER/RANK/DENSE_RANK/NTILE
的例子。
可以参考着看看。
参考资料:http://hi.baidu.com/wangqing999/blog/item/f4a845660a5352cbe7113a88.html
热心网友 时间:2023-10-12 03:15
分析函数,row_number()/rank()/dense_rank()/sum()... over()
row_number()函数是不可以单独使用的