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
的临时表,并且无论何时{{1}的初始值,我都必须在Ranks
列中插入相同的值}重复。我现在在ErrorCode
列中为NULL:
Ranks
我想要为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
。
答案 0 :(得分:1)
尝试一下:
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
结尾并与另一个错误分组。
答案 1 :(得分:0)
您可以尝试以下查询。
CREATE TABLE #TempErrorCode
( id int identity(1,1) not null,
[ErrorCode] VARCHAR(50)
,[ErrorCount] VARCHAR(50)
);
INSERT INTO #TempErrorCode ([ErrorCode], [ErrorCount])
VALUES ('module_position', 'A1_16__1')
,('head_id HZ0C1', ' 000877')
,('start_dt', ' 2018-09-10 00:18:27')
,('module_position', 'A2_16__1')
,('head_id HZ0C1', ' 000878')
,('start_dt', ' 2018-09-10 00:18:27')
ALTER TABLE #TempErrorCode ADD RankVal INT
SELECT * INTO #TempRank FROM(
SELECT *, ROW_NUMBER () OVER (PARTITION BY ErrorCode ORDER BY ErrorCode desc) as NewRank FROM #TempErrorCode
)a
--SELECT * FROM #TempRank
UPDATE A
SET RankVal = RA.NewRank
from #TempErrorCode A
INNER JOIN #TempRank RA
ON A.ErrorCode = RA.ErrorCode and A.Id = RA.Id
SELECT * FROM #TempErrorCode order by RankVal
输出如下所示
id ErrorCode ErrorCount RankVal
1 module_position A1_16__1 1
2 head_id HZ0C1 000877 1
3 start_dt 2018-09-10 00:18:27 1
4 module_position A2_16__1 2
5 head_id HZ0C1 000878 2
6 start_dt 2018-09-10 00:18:27 2