2016-01-11 52 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建議的解決方案要優雅得多。 –