【发布时间】:2018-01-19 20:51:21
【问题描述】:
我有下表
Prod_id Units sold
1, 100
2, 95
3, 84
4, 95
5, 100
我想知道为什么第一个查询给出正确的行数,而第二个查询只返回 1
select
(ROW_NUMBER() OVER (Partition by amount order by id))
from Products
select *,
(select ROW_NUMBER() OVER (Partition by amount order by id) a )
from Products
结果在这里:http://sqlfiddle.com/#!6/dfd59/11
我想用它来申请 100, 100 1st 和 5th
行和 95、95 到此查询中的第 2 行和第 4 行
不使用with 语句。
如果有办法请告诉我
【问题讨论】:
-
不要写成子查询,而是写成表达式
-
你能分享一个例子吗?
-
select *, ROW_NUMBER() OVER (Partition by amount order by id) a from Products -
使用您的第一个查询,将 row_Number 窗口函数从括号中取出,它们只会添加噪音。然后添加您想要的其他列。
-
在您的第一个查询中,Row_Number() 被评估为一个表达式;在您的第二个中,它是子查询的一部分,该子查询在 Products 中的每一行执行一次。由于子查询每次执行时只有一行,所以它总是返回 1
标签: sql sql-server rowcount partition-by