查找重复值的出现
Finding Occurrence of the duplicate values
我有 table 3 列(id、名称、出现次数),我想根据 id 列更新出现次数列,并附上快照以供参考。
例如,如果我的 ID 列有 3 次“606”值,那么我出现的列应该有 3 次与所有“606”值。
下面是我试过的方法
我尝试使用 group by
和 Having
子句查找重复值并将其保存在临时 table 中,然后我尝试从那里加入 table 值来自温度 table.
您可以在 可更新的 CTE 中使用 window 函数。
您尚未提供任何实际样本数据,因此未经测试,但以下内容应该有效:
with x as (
select Id, Occurence, count(*) over(partition by Id) qty
from Table
)
update x
set Occurence=Qty
您也可以采用基于 GROUP BY 的方法。
declare @TABLE TABLE(ID INT, NAME CHAR(3), occurance int null)
insert into @TABLE VALUES
(1,'AAA',NULL),(1,'AAA',NULL),(2,'CCC',NULL),(3,'DDD',NULL), (3,'DDD',NULL),(4,'EEE',NULL),(5,'FFF',NULL);
;WITH CTE_Table as
(
SELECT ID, COUNT(*) AS Occurance
FROM @table
group by id
)
UPDATE t
SET occurance = c.occurance
FROM @table t
INNER JOIN CTE_Table as c
on C.ID = T.ID
SELECT * FROM @TABLE
ID
NAME
occurance
1
AAA
2
1
AAA
2
2
CCC
1
3
DDD
2
3
DDD
2
4
EEE
1
5
FFF
1
您可以使用 CTE 并计算行号并根据 CTE
更新您的 table 基础
;WITH q
AS
(
SELECT Id,COUNT(1) 'RowNum'
FROM YourTable
GROUP BY Id
)
UPDATE YourTable
SET Occurrence=q.RowNum
FROM YourTable t
INNER JOIN q
ON t.Id=q.Id
我有 table 3 列(id、名称、出现次数),我想根据 id 列更新出现次数列,并附上快照以供参考。
例如,如果我的 ID 列有 3 次“606”值,那么我出现的列应该有 3 次与所有“606”值。
下面是我试过的方法
我尝试使用 group by
和 Having
子句查找重复值并将其保存在临时 table 中,然后我尝试从那里加入 table 值来自温度 table.
您可以在 可更新的 CTE 中使用 window 函数。
您尚未提供任何实际样本数据,因此未经测试,但以下内容应该有效:
with x as (
select Id, Occurence, count(*) over(partition by Id) qty
from Table
)
update x
set Occurence=Qty
您也可以采用基于 GROUP BY 的方法。
declare @TABLE TABLE(ID INT, NAME CHAR(3), occurance int null)
insert into @TABLE VALUES
(1,'AAA',NULL),(1,'AAA',NULL),(2,'CCC',NULL),(3,'DDD',NULL), (3,'DDD',NULL),(4,'EEE',NULL),(5,'FFF',NULL);
;WITH CTE_Table as
(
SELECT ID, COUNT(*) AS Occurance
FROM @table
group by id
)
UPDATE t
SET occurance = c.occurance
FROM @table t
INNER JOIN CTE_Table as c
on C.ID = T.ID
SELECT * FROM @TABLE
ID | NAME | occurance |
---|---|---|
1 | AAA | 2 |
1 | AAA | 2 |
2 | CCC | 1 |
3 | DDD | 2 |
3 | DDD | 2 |
4 | EEE | 1 |
5 | FFF | 1 |
您可以使用 CTE 并计算行号并根据 CTE
更新您的 table 基础;WITH q
AS
(
SELECT Id,COUNT(1) 'RowNum'
FROM YourTable
GROUP BY Id
)
UPDATE YourTable
SET Occurrence=q.RowNum
FROM YourTable t
INNER JOIN q
ON t.Id=q.Id