gpt4 book ai didi

TSQL:over 子句

转载 作者:行者123 更新时间:2023-12-05 00:42:19 28 4
gpt4 key购买 nike

请帮我理解如何订购 对over子句的影响。我已经阅读了 msdn 和一本书,但仍然误解了。

假设我们有这样的查询:

SELECT Count(OrderID) over(Partition By Year(OrderDate))
,*
FROM [Northwind].[dbo].[Orders]
ORDER BY OrderDate

结果是每个原始数据都有一个列,该列的值是表中有多少条目具有相同的年份。

alt text http://img-fotki.yandex.ru/get/3912/svin80.2/0_3b871_3bb591da_XL

但是当我尝试这个查询时发生了什么?:
SELECT ROW_NUMBER() over(Partition By Year(OrderDate)
order by OrderDate) as RowN
,*
FROM [Northwind].[dbo].[Orders]
ORDER BY RowN

alt text http://img-fotki.yandex.ru/get/3908/svin80.2/0_3b872_c9352fb1_XL

现在我看到每个 RowN 对于每个值(1996、1997、1998)都有 3 个不同的年份。我预计所有 1996 年日期的 RowN 将是相同的值。请向我解释发生了什么以及为什么。

最佳答案

在这种情况下:

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 年,将有订单 1 到 n 按当年的日期排序......就像这是 1997 年的第一次订单,1997 年的第二次订单,等等。

关于TSQL:over 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2216878/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com