带分区的SQL行计数函数

带分区的SQL行计数函数,sql,sql-server,tsql,window-functions,Sql,Sql Server,Tsql,Window Functions,我有一个查询,它从几个UNION ALL JOIN查询返回一组结果,作为一个名为DATA的表 然后我在这上面做行号,以获取特定分组的行号WorksOrderNo ROW_NUMBER() Over(partition by Data.WorksOrderNo order by Data.WorksOrderNo) as RowNo, 是否有一个等效的ROW_Count函数,我可以在其中指定一个分区,并返回该分区的行数 ROW_Count() Over(partition by Data.Wor

我有一个查询,它从几个UNION ALL JOIN查询返回一组结果,作为一个名为DATA的表

然后我在这上面做行号,以获取特定分组的行号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。

看起来您只需要分组方式和计数:


看起来您只需要分组和计数:

这个函数就是COUNT。在SQL Server中,所有聚合函数都可以用作窗口函数,只要它们不使用DISTINCT

请注意,对于总计数,您不希望通过以下方式获得订单:

如果包含ORDER BY,则计数是累积的,而不是分区中所有行的常数。

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

请注意,对于总计数,您不希望通过以下方式获得订单:


如果包含ORDER BY,则计数是累积的,而不是分区中所有行的常数。

Pretty sure COUNT*执行此操作。Pretty sure COUNT*执行此操作。由于select包含其他唯一行,因此我无法按分组。@OWSam好吧,从技术上讲,您可以将此查询放入CTE并重新联接。。。但Gordon建议的解决方案要优雅得多。我无法分组,因为select包含其他唯一的行。@我很好,从技术上讲,您可以将此查询放入CTE并重新联接。。。但戈登提出的解决方案要优雅得多。我知道有一种简单的方法可以用count来完成。非常感谢:太好了。我知道有一种简单的方法可以用count来完成。非常感谢:
select WorksOrderNo, count(*) as Row_Count
from Data 
group by WorksOrderNo
COUNT(*) Over (partition by Data.WorksOrderNo) as cnt