根据单独列(C#)

时间:2017-07-11 14:23:42

标签: c# sql sql-server insert

我的表目前看起来像这样

 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#或没有C#来实现这一点的,我不确定如何处理这个问题,我想我需要保持运行计数任何帮助吗?

请注意我想修改我的EXISTING TABLE而不是创建一个新表(第一个是我初始表的样子)

其中SENSORTYPE ='Camera'如果多于一个相同的ID,则应递增。

2 个答案:

答案 0 :(得分: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应该使用该列。否则,这些值将是连续的,但是是任意排序的。

答案 1 :(得分:0)

为了获得从1开始的SENSOR数字的顺序实现(非ARBITRARLY)我刚刚创建了另一行rownum,它跟踪行#(1-endrow)并使用了它的顺序,所以它没有使用任意数字。 - 如果有人在想!