带分区的 SQL Row_Count 函数
Posted
技术标签:
【中文标题】带分区的 SQL Row_Count 函数【英文标题】:SQL Row_Count function with Partition 【发布时间】:2016-01-11 15:07:36 【问题描述】:我有一个查询,它从几个 UNION ALL
连接的查询中返回一组结果作为名为 DATA
的表。
然后我对此进行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。
【问题讨论】:
很确定 COUNT(*) 会这样做。 【参考方案1】:函数就是COUNT()
。在 SQL Server 中,所有聚合函数都可以作为窗口函数使用,只要不使用DISTINCT
即可。
请注意,对于总计数,您不需要 ORDER BY
:
COUNT(*) Over (partition by Data.WorksOrderNo) as cnt
如果包含ORDER BY
,则COUNT()
是累积的,而不是分区中所有行的常量。
【讨论】:
完美。我知道使用 count 会有一种简单的方法。非常感谢:)【参考方案2】:看起来你只需要group by
和count
:
select WorksOrderNo, count(*) as Row_Count
from Data
group by WorksOrderNo
【讨论】:
由于选择包含其他唯一行,我无法分组。 @OWSam 好吧,从技术上讲,您可以将此查询放入 CTE 并返回...但 Gordon 建议的解决方案要优雅得多。以上是关于带分区的 SQL Row_Count 函数的主要内容,如果未能解决你的问题,请参考以下文章