2009-10-15 45 views
1

說我的表是這樣的...SQL Server:如何獲得每個常用值的rownumber?

` 
Tenancy Number Tenant Number Tenant 
1     1    John 
1     2    Jane 
1     3    Pete 
2     56    Fred 
2     78    Jackie 

如何選擇基於tenany號碼分組的ROWNUMBER?到目前爲止,我可以獲得行號,但我無法想出一個方法來「重置」下一個租戶號碼。

我想達到以下效果

MYROWNUM   Tenancy Number Tenant Number  Tenant 
    1    1     1    John 
    2    1     2    Jane 
    3    1     3    Pete 
    1    2     56    Fred 
    2    2     78    Jackie 

很抱歉,如果我沒有解釋這太好了!

謝謝!

回答

5
SELECT ROW_NUMBER() OVER (PARTITION BY [Tenancy Number] 
          ORDER BY [Tenant Number] 
         ) AS myrownum 
     ,[Tenancy Number] 
     ,[Tenant Number] 
     ,Tenant 
from <table> 
+1

謝謝,PARTITION BY解決了我的問題;) – Jimmy 2009-10-15 10:55:50

+0

完美的答案,這將是很好的也有一個解釋有關在功能內使用ORDER BY和PARTITION BY的區別ROW_NUMBER() – Raffaeu 2016-06-18 11:16:48

5

您可以使用row_number()函數。

例子:

SELECT 
    SalesOrderID, OrderDate, 
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' 
FROM 
    Sales.SalesOrderHeader 

HTH

+1

實際上,這還沒有考慮到的是, 「MYROWNUM」 應該啓動每個新的「租賃號碼」爲1。你在你的'row_number()OVER ....'函數中缺少一個「PARTIION BY」子句調用 – 2009-10-15 10:55:08

+1

這讓我有一半的地方需要PARTITION BY。 ;) – Jimmy 2009-10-15 10:56:29

+0

thx marc_s,我的德。 – KB22 2009-10-15 11:23:03

3

使用ROW_NUMBER()函數:

DECLARE @t TABLE (TenancyNbr smallint, TenantNbr smallint, Tenant varchar(10)) 
INSERT INTO @t 
SELECT 1,1,'Jack' 
UNION ALL SELECT 1,2,'Janet' 
UNION ALL SELECT 1,3, 'Chrissy' 
UNION ALL SELECT 2,56, 'Mr. Roper' 
UNION ALL SELECT 2,78, 'Mrs. Roper' 


SELECT MyRowNum = ROW_NUMBER() OVER (PARTITION BY TenancyNbr ORDER BY TenantNbr), 
    TenancyNbr, TenantNbr, Tenant 
FROM @t