SQL Server 中第一个实例 0 其余的变为 1

Red*_*vil 2 sql t-sql sql-server sql-server-2012

我有一个场景,其中 IFIDCodeInsertDate相同的,如果它是第一个条目,那么它将是 0,否则是 1。

演示数据:

CREATE TABLE #test 
(
     ID int,
     code int,
     InsertDate datetime2
)

Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (2,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (3,1,'2019-09-17 03:19:00.0000000')
Run Code Online (Sandbox Code Playgroud)

预期产出

ID  code    InsertDate              flag   
-----------------------------------------
1    1  2019-09-17 03:19:00.0000000  0     
1    1  2019-09-17 03:19:00.0000000  1     
1    1  2019-09-17 03:19:00.0000000  1     
2    1  2019-09-17 03:19:00.0000000  0     
3    1  2019-09-17 03:19:00.0000000  0     
Run Code Online (Sandbox Code Playgroud)

我尝试过的

SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY ID, Code, Insertdate ORDER BY InsertDate) flag 
FROM #test
Run Code Online (Sandbox Code Playgroud)

这样我就得到了最初的逻辑,但接下来我需要帮助做什么。

Zho*_*rov 6

一个简单的CASE表达可能会有所帮助:

SELECT
   *,
   CASE 
      WHEN ROW_NUMBER() OVER (PARTITION BY ID, Code, Insertdate ORDER BY InsertDate) = 1 THEN 0 
      ELSE 1 
   END AS Flag
FROM #test
Run Code Online (Sandbox Code Playgroud)