2015-04-27 21 views
1

我有表中以下格式更新最后行作为第一行价值

SeqID Control_ID Data_Value RowNum 

1 SEARCH   SEARCH  3 
1 BROKERREF  BZ815  4 
1 SYSTEM   0   5 
2 pdp   pdp   1 
2 test   123   2 
2 system   235   3 

我想更新该表将在下面的格式

SeqID Control_ID Data_Value RowNum 

1  BROKERREF  BZ815  4 
1  SYSTEM   0   5 
1  SEARCH   SEARCH  3 
2  test   123  2 
2  system   235  3 
2  pdp   pdp  1 

,我需要选择最上面一行作为最后一行为每组序列ID。

注:CONTROL_ID和DataValue列名都是一样的,其需要提前被选择作为最后一行的每个唯一sequenceID

由于该行。

+0

在更新后的表又是什么改变,除了它的排序?为什么你想更新你的表格;)。 –

回答

0

使用ROW_NUMBER()找到第一行,每SeqID。然后,在外部查询,使用CASE表达ORDER BY子句中放置此行的最后一个 位置的分区中:

SELECT SeqID, Control_ID, Data_Value, RowNum 
FROM (
    SELECT SeqID, Control_ID, Data_Value, RowNum, 
      ROW_NUMBER() OVER (PARTITION BY SeqID ORDER BY RowNum) AS rn 
    FROM mytable) t 
ORDER BY SeqID, 
     CASE WHEN t.rn = 1 THEN 1 ELSE 0 END, 
     RowNum 

SQL Fiddle Demo