2014-06-10 96 views
0

通過使用行號,我已經分配了一些列。基本上查詢如下。row_number從最後一個數字開始?

update product set row_number= CONVERT(nvarchar(255), (ROW_NUMBER() over (partition by product.groupID order by product.groupID))) 

但現在有新產品,他們沒有row_number(作爲null)。我無法重新分配所有row_numbers。我想繼續使用最後一個數字來分配空字符。 我該怎麼用tsql來做。

基本上按照下面的樣本表。 d應該得到4,G應該得到3和H應爲1。

product row_number groupID 
    A   1   1 
    B   2   1 
    C   3   1 
    D  null  1 
    E   1   2 
    F   2   2 
    G  null  2 
    H  null  3 
+0

分區由product.groupID ORDER BY ** ** product.groupID? –

+0

是否有可能在後臺重命名此表,讓更新表單指向新表名,並將此表名替換爲使用ROW_NUMBER()OVER(PARTITION BY product.groupID ORDER BY product.product)的視圖作爲這row_number列? –

+0

@hamlet:我認爲order by by does not影響查詢。但是,我認爲分組是一種種類。在我對谷歌的研究之後,我看到了這種用法。無論如何,這個鍛鍊最初適合我。這與我原來的問題 – batmaci

回答

1

創建一個創建行號的CTE,然後更新表與CTE的結果。

;with cte(product, groupId, newRowNumber) 
as(
select product, groupId, ROW_NUMBER() over (partition by product.groupID order by product.groupID, product.product) 
from product 
) 

update product 
set row_number = newRowNumber 
from cte 
where cte.groupId = product.groupId 
and cte.product = product.product 
and product.row_number is null 

SQL Fiddle

+0

無關,謝謝Jerrad,它真的對我有用:) – batmaci

0

嘗試這種情況:

與列表作爲 **(選擇ID,ROW_NUMBER()以上(分區由GROUPID爲了通過groupid)從產品中刪除) 更新產品 set dbo.product.row_number = CONVERT(nvarchar(255),list.rn) from list inner join dbo.product on list.ID = dbo.product.ID **

相關問題