sql - 我想根据其他列所需条件为 Ranks 列插入值

标签 sql sql-server tsql

declare @count int = 0

while (@count != 3156)
begin
    while(ErrorCode not like 'm%')
    begin
        insert into #temp(Ranks) 
        values(@count)  
    end

    set @count = @count + 1
end

我有一个包含 3 列 ErrorCodeErrorCountRanks 的临时表,我必须在 Ranks< 中插入相同的值 列,每当 ErrorCode 的初始值重复时。我现在在 Ranks 列中有 NULL:

ErrorCode               ErrorCount            Ranks
----------------------------------------------------
module_position           A1_16__1               1
head_id HZ0C1              000877                1
start_dt            2018-09-10 00:18:27          1
module_position           A2_16__1               2
head_id HZ0C1              000878                2
start_dt            2018-09-10 00:18:27          2

我希望 Ranks 列的输出如上。请注意,每当我必须插入新排名时,初始值始终是 module_position

最佳答案

试试这个:

DECLARE @DataSource TABLE
(
    [RowID] INT
   ,[ErrorCode] VARCHAR(32)
   ,[ErrorCount] VARCHAR(32)
);

INSERT INTO @DataSource ([RowID], [ErrorCode], [ErrorCount])
VALUES (1, 'module_position', 'A1_16__1')
      ,(2, 'head_id HZ0C1', '   000877')
      ,(3, 'start_dt', ' 2018-09-10 00:18:27')
      ,(4, 'module_position', 'A2_16__1')
      ,(5, 'head_id HZ0C1', '   000878')
      ,(6, 'start_dt', ' 2018-09-10 00:18:27')

SELECT [ErrorCode]
      ,[ErrorCount]
      ,SUM(IIF([ErrorCode] = 'module_position', 1, 0)) OVER (ORDER BY [RowID])
FROM @DataSource;

请注意,您可以通过某种方式对行进行正确排序。您不能假设在不指定唯一的排序标准的情况下从表中读取它们总是会给您相同的期望结果。

在上面的示例中,我使用了 RowID 列。例如,如果您有创建日期,则可以按它排序。

如果您不对行进行排序,您可以以一个错误的 head_id 结尾,以便与另一个错误分组。

关于sql - 我想根据其他列所需条件为 Ranks 列插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53774538/

相关文章:

java - REST Web服务jpa更新语句

MySQL 计算为行

php - 在一个查询中选择更新

sql-server - 如何将一封电子邮件发送给多个收件人?

sql-server - 如何从我的主机 Macbook 连接到在 VirtualBox 上运行的 SQL Server

sql - 使用映射表动态更改列名

MYSQL : Error in Tigger

SQL UPDATE 使用规则优化查询

mysql - 一个返回true/false的sql函数,存在一些数据计算问题

sql-server - 并行化存储过程是否会在集群上产生更高的性能?