2016-01-11 31 views
1

我有一个查询从几个UNION ALL加入的查询返回一组结果作为名为DATA的表。具有分区的SQL Row_Count函数

然后我做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。

+1

很确定COUNT(*)会这样做。 –

回答

5

的功能仅仅是COUNT()。在SQL Server中,只要不使用DISTINCT,所有聚合函数都可以用作窗口函数。

注意的总数,你不希望ORDER BY

COUNT(*) Over (partition by Data.WorksOrderNo) as cnt 

如果包括ORDER BY,那么COUNT()是累积性的,而不是常数分区中的所有行。

+0

完美。我知道使用count会有一个简单的方法。非常感谢 :) – OWSam

1

它看起来像你只需要group bycount

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

由于包含其他唯一行的选择,我无法进行分组。 – OWSam

+0

@OWSam很好,从技术上讲,您可以将此查询放入CTE中,然后返回...但Gordon建议的解决方案要优雅得多。 –