2012-06-22 31 views
2

我想在導入步驟中爲中間表上的重複條目創建一個整數計數器。比方說,我有一個名爲FinalTable表,它看起來是這樣的:SQL:爲重複條目創建計數器

FinalTable

ID  Date   SameDateCounter 
1003  2012/01/01 NULL 
1004  2012/02/01 NULL 
1005  2012/03/01 1 
1006  2012/03/01 2 
1007  2012/03/01 3 
1008  2012/04/01 1 
1009  2012/04/01 2 

,並就(Date, SameDateCounter)唯一約束。在中間步驟中,數據在IntermediateTable中,除了它沒有任何約束外,它看起來完全像FinalTable。所以這個問題的出發點在這裏:

IntermediateTable

ID  Date   SameDateCounter 
1003  2012/01/01 NULL 
1004  2012/02/01 NULL 
1005  2012/03/01 NULL 
1006  2012/03/01 NULL 
1007  2012/03/01 NULL 
1008  2012/04/01 NULL 
1009  2012/04/01 NULL 

,我需要生成SameDateCounter值,從1開始,其中的日期出現不止一次。

+0

預期結果? – manurajhada

+0

預期結果=如最終表中所示 – Karl

+0

您可以按照[文章](http://weblogs.sqlteam.com/jeffs/archive/2007/03/28/60146.aspx) – jocelyn

回答

3

您可以使用ROW_NUMBER()功能與PARTITION BY子句結合:

;WITH Data AS 
( 
    SELECT 
     ID, Date, 
     SameDateCounter = ROW_NUMBER() OVER (PARTITION BY Date ORDER BY ID DESC) 
    FROM dbo.YourTableNameHere 
) 
SELECT * 
FROM Data 

DatePARTITION BY Date條款組每個單獨的值變成了自己的「分區」,並ROW_NUMBER()捧出來的數字從1開始,每個劃分。

因此,您的SameDayCounter將從1開始,每個新的一天將顯示該特定日子的行。

+0

中所述嘗試使用排名和分區是的,這是我的想法,但沒有時間寫它:) – jocelyn