2017-07-11 31 views
0

我的表目前看起來像這樣插入值

ID NAMESITE SENSORTYPE ____(columns between) SENSORNUMBER(initialized to all null) 
--------------------------------------------------------------- 
SW02  random        null-- 
SW02  camera        null-- 
SW02  random        null 
SW02  camera        null 
NW02  RANDOm        null 
NW02  camera        null 
NW02  random        null 
NW02  camera        null 
NW02  camera        null 

基本上就是我想要做的是增加傳感器數量,如果它與傳感器類型接觸= '相機',如果它與2個相同的ID相接觸,它應該在同一行中輸入增加的值,用於傳感器編號 然而,所有不是相機的ID傳感器類型都可以爲空

示例輸出應該是這樣的

ID NAMESITE SENSORTYPE ____(columns between) SENSORNUMBER(initialized entire Column NULL) 
----------------------------------------------------------------------- 
SW02   random        null-- 
SW02   camera         1 
SW02   random        null 
SW02   camera         2 
NW02   RANDOm        null 
NW02   camera         1 
NW02   random        null 
NW02   camera         2 
NW02   camera         3 

我不知道我想如何用C#或不用,我不知道如何處理這個,我認爲我需要保持運行計數任何幫助?

請注意,我想修改我現有的表中沒有創建新表(第一個是我最初的表看起來像)

其中SENSORTYPE =「攝像頭」應該若再那麼相同的一個遞增ID。

回答

1

我想你可以用update和CTE這樣做:

with toupdate as (
     select t.*, row_number() over (partition by id order by id) as seqnum 
     from t 
     where sensortype = 'Camera' 
    ) 
update toupdate 
    set sensornumber = seqnum; 

注:您的傳感器數量爲每個id增加。但是沒有(明顯的)排序值。如果您有這樣的列,那麼order by應該使用該列。否則,這些值將按順序但任意排序。

+0

在SQL查詢中,是否正確? - 我應該如何更新表名? – rahulchawla

+0

它必須是相同的ID和相機,然後它從1開始並進一步遞增,直到它與CAMERA達到不同的ID並在1處重新開始,所有其他值爲空,因此它不是傳感器類型? – rahulchawla

+0

我使用這個,我得到的價值92,93的前兩個傳感器的數字,然後94,然後79,80爲下一個,它的全部地方, – rahulchawla

0

爲了得到一個從1開始的傳感器序列(不是ARBITRARLY)的順序實現,我剛剛創建了另一行,名爲rownum,它跟蹤了行(#1-endrow)並使用了它的順序,所以它不是使用任意數字。 - 如果有人想知道!