SQL Server 查找重复值的出现次数

ou6hu8tu  于 2022-11-28  发布在  其他
关注(0)|答案(3)|浏览(174)

我有一个包含3列(ID、名称、引用)的表,我希望根据ID列更新引用的引用列、附着的捕捉。

例如,如果我的ID列具有“606”值3次,那么我的Occurrent列应该具有3次,而不是所有的“606”值。
下面是我尝试的方法。
我尝试使用group byHaving子句查找重复值,并将其保存在临时表中,然后尝试从临时表中连接表值。

ejk8hzay

ejk8hzay1#

您可以在 * 可更新CTE* 中使用 * 窗口函数 *。
您尚未提供任何实际的示例数据,因此这是未经测试的,但以下内容应该可以正常工作:

with x as (
  select Id, Occurence, count(*) over(partition by Id) qty
  from Table
)
update x 
set Occurence = Qty;
vlju58qv

vlju58qv2#

您也可以使用基于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

| 识别码|名称|出现|
| - -|- -|- -|
| 一个|美国汽车协会|2个|
| 一个|美国汽车协会|2个|
| 2个|CCC认证|一个|
| 三个|限定日|2个|
| 三个|限定日|2个|
| 四个|电子电气设备|一个|
| 五个|法国法郎|一个|

rjee0c15

rjee0c153#

您可以使用CTE计算行号,并根据CTE更新表

;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

相关问题