请帮我弄清楚订单对over子句的影响。我读过msdn和一本书,但仍然被误解了。
假设我们有这样的查询:
SELECT Count(OrderID) over(Partition By Year(OrderDate))
,*
FROM [Northwind].[dbo].[Orders]
ORDER BY OrderDate结果是,每个raw都有一个列,其值为表中有多少个条目具有相同的年份。
XL
但是当我尝试这个查询时发生了什么呢?
SELECT ROW_NUMBER() over(Partition By Year(OrderDate)
order by OrderDate) as RowN
,*
FROM [Northwind].[dbo].[Orders]
ORDER BY RowNXL
现在,我看到了每一个RowN对于每一个值都有3个不同的年份(1996年、1997年、1998年)。我预计1996年全年的RowN值将是相同的。请解释一下发生了什么以及原因。
发布于 2010-02-07 13:30:26
在这种情况下:
SELECT ROW_NUMBER() over(Partition By Year(OrderDate)
order by OrderDate) as RowN,*
FROM [Northwind].[dbo].[Orders]
order by RowN您看到的是,它给出了一个按年划分的行号,这意味着每年都有自己的爬行号。为了使这个结果更清晰一点:
SELECT ROW_NUMBER() over(Partition By Year(OrderDate)
order by OrderDate) as RowN,*
FROM [Northwind].[dbo].[Orders]
order by RowN, Year(OrderDate)这意味着,每年,比方说1997年,在year...like (这是1997年的第一次订单,1997年的第二次订单,等等)之前,订单1到n将被订购。
发布于 2010-02-07 13:29:40
如果你这样做的话,结果会更有意义:
SELECT
Year(OrderDate),
ROW_NUMBER() over(Partition By Year(OrderDate)order by OrderDate) as RowN,
*
FROM [Northwind].[dbo].[Orders]
ORDER BY Year(OrderDate), RowN现在您可以看到,从1开始,按订购日期排序的行数每年都在增加:
Year RowN Order Date
1997 1 10400 1997-01-01 00:00:00
1997 2 10401 1997-01-01 00:00:00
1997 3 10402 1997-01-02 00:00:00
...
1998 1 10808 1998-01-01 00:00:00
1998 2 10809 1998-01-01 00:00:00
1998 3 10810 1998-01-01 00:00:00
...https://stackoverflow.com/questions/2216878
复制相似问题