繁体   English   中英

SQL Server:确定第一行值出现在列中并插入表中

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

我具有以下表结构:

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

我需要在此表中添加一个新列,以表明这TransNbr是类型A的第一个TransNbr

我能够使以下SELECT查询起作用...但是我不确定现在如何将新的填充的FirstTime列添加到INVOICE表中:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM