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 列 ErrorCode
、ErrorCount
和 Ranks
的临时表,我必须在 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/