将最后一行更新为第一行值

时间:2015-04-27 12:55:19

标签: sql sql-server

我有以下格式的表格

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的最后一行的行是相同的

提前致谢。

1 个答案:

答案 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