2011-02-14 34 views
1

我有值的表,更新獲得check_order

col1  col2  col3 
1   0   ABA 
1   0   ABB 
1   0   ABC 
2   0   BBA 
2   0   BBB 
2   0   BBC 

我試圖更新表格看COL1的重複次數,在這種情況下COL1一直重複這樣每次更新3次了col2 1。

更新表後

需要的輸出

col1  col2  col3 
1   1   ABA 
1   2   ABB 
1   3   ABC 
2   1   BBA 
2   2   BBB 
2   3   BBC 

回答

1

假設你正打算COL3是在非遞減順序遞增,這應該這樣做:

UPDATE MyTable 
SET col2=(SELECT COUNT(*) 
      FROM MyTable AS T2 
      WHERE T2.col1=T1.col1 AND T2.col3<=T1.col3) 
FROM MyTable AS T1 

您將獲得COL2重複,如果在COL3重複特定的col1值。

如果你有興趣,這裏是一個相當詳細(更昂貴的執行智慧)解決方案使用排名功能。它具有相同的問題(即計數被重複),用於COL1/COL3重複,因爲以前的解決方案:-ing

UPDATE MyTable 
SET col2=(
    -- In the following query, DISTINCT merges rank dups caused by col3 dups 
    -- SELECT TOP(1) MyRank would also work. 
    SELECT DISTINCT MyRank 
    FROM (
     SELECT col3, 
       DENSE_RANK() OVER (PARTITION BY col1 ORDER BY col3) AS MyRank 
     FROM MyTable 
     WHERE col1=UpdatedTable.col1 
    ) As RankTable 
    WHERE RankTable.col3=UpdatedTable.col3) 
FROM MyTable AS UpdatedTable 
3

一個簡單的ROW_NUMBER()應該工作

;with TMP as (
select *, row_number() over (partition by col1 order by col3) as RowNum 
from tbl 
) 
update TMP set col2=RowNum 

  • TBL:是你的表名
  • 分區由COL1:復位行由COL3編號爲每個COL1組
  • 順序:爲COL1組
內編號的基礎