带有分区

时间:2016-01-11 15:07:37

标签: sql sql-server tsql window-functions

我有一个查询,它会从几个DATA个已加入的查询中返回一组名为UNION ALL的表格的结果。

我正在对此进行ROW_NUMBER(),以获取特定分组的行号(WorksOrderNo)

ROW_NUMBER() Over(partition by Data.WorksOrderNo order by Data.WorksOrderNo) as RowNo,

是否有一个等效的ROW_Count函数,我可以指定一个分区,并返回该分区的行数?

ROW_Count() Over(partition by Data.WorksOrderNo order by Data.WorksOrderNo) as RowNo ???

原因是,这是用于驱动报表布局的查询。 作为其中一部分,我需要根据每个WorksOrderNo的总行数是否> 1来格式化。

因此,例如,如果工作订单有三行,row_number函数当前返回1,2和3,其中行数将在每行返回3。

2 个答案:

答案 0 :(得分:5)

该功能只是DISTINCT。在SQL Server中,所有聚合函数都可以用作窗口函数,只要它们不使用ORDER BY

请注意,对于总计数,您不需要COUNT(*) Over (partition by Data.WorksOrderNo) as cnt

ORDER BY

如果您包含COUNT(),则numeric是累积的,而不是分区中所有行的常量。

答案 1 :(得分:1)

看起来您只需要group bycount

select WorksOrderNo, count(*) as Row_Count
from Data 
group by WorksOrderNo