2016-03-21 125 views
1

選擇新的專欄中,我有一個像下面基於現有價值

create Table #Temp(id int, Data1 varchar(10), Data2 bigint) 

Insert Into #Temp 
Values(1,'Value1',109040774), 
    (2,'Value2',10000006099758), 
    (3,'Value3',10000006099758), 
    (4,'Value1',14538), 
    (5,'Value2',10000006097458), 
    (6,'Value3',10000006097458), 
    (7,'Value1',4454834), 

,並試圖基於Data1選擇新列,所以輸出將

id Data1 NewColumn 
1 Value1 109040774 
2 Value2 109040774 
3 Value3 109040774 
4 Value1 14538  --reset here because same value of Data1 (Value 1 started repeating) 
5 Value2 14538 
6 Value3 14538 
7 Value1 4454834 --reset here because same value of Data1 (Value 1 started repeating) 

我試圖用樣本數據像下面的東西,但不是我之後

SELECT id, Data1, 
     FIRST_VALUE(Data2) OVER (Partition by Data1 ORDER BY Id ASC) AS NewCol 
FROM #Temp 
Order By Id 

任何幫助表示讚賞

+0

你的問題有點含糊。 'value1'有一些重複的特殊值嗎?所有三個值在一個循環中重複嗎?如果失蹤怎麼辦? –

+0

@戈登林諾夫:對不起,混亂,是的,他們重複。我更新了一些行 –

回答

2

這裏是我的想法假設一個特殊的value1定義一個新組:

  • 使用累計總和來計算或每行前的value1 S上的號碼。
  • 這定義了一個分組。
  • 在每組中,使用first_value()

因此:

select t.id, t.data1, 
     first_value(data2) over (partition by grp order by id) as newcolumn 
from (select t.*, 
      sum(case when data1 = 'value1' then 1 else 0 end) over (order by id) as grp 
     from t 
    ) t;