SQL 服务器:识别出现在列中的第一行值并插入 table

SQL Server : identify first row value appears in column and insert into table

我有以下 table 结构:

Id     | TransNbr | Type |
-------+----------+------+
1235   | 220      | A    |
1236   | 221      | A    |
1237   | 220      | A    |
1238   | 220      | B    |
1239   | 221      | B    |

我需要向此 table 添加一个新列,以指示这是否是 A.

类型的第一个 TransNbr

我能够使以下 SELECT 查询正常工作...但我不确定现在如何将新的填充 FirstTime 列添加到 INVOICE table:

SELECT 
    *, 
    CASE 
       WHEN (ROW_NUMBER() OVER(PARTITION BY TransNbr ORDER BY Id)) = 1 
          THEN 1 
          ELSE 0 
    END FirstTime
FROM INVOICE
WHERE Type = 'A'

如果您想更新 ID 为 1235 的行上的字段,那么您可以这样做:

with toupdate as (
      select i.*, row_number() over (partition by type order by id) as seqnum
      from invoice
      where type = 'A'
     )
update toupdate
    set FirstTime = 1;

如果这不是您真正想要的,您可以调整 CTE 中的逻辑。

如果你没有FirstTime标志,你可以这样做:

alter table invoice add FirstTime tinyint default 0;

首先,您需要创建第一个字段:

ALTER TABLE INVOICE
ADD firsttime BIT NULL;--or tinyint

这应该相应地更新新创建的列。

UPDATE invoice
SETfirsttime = a.firsttime
FROM invoice 
INNER JOIN  
(
SELECT  id, 
    CASE WHEN (ROW_NUMBER() OVER(PARTITION BY TransNbr ORDER BY 
    Id))=1 THEN 1 ELSE 0 END FirstTime
FROM INVOICE 
WHERE Type = 'A')a 
ON invoice.id = a.id

使用您的示例数据进行了测试,看起来不错。