【问题标题】:Finding Occurrence of the duplicate values查找重复值的出现
【发布时间】:2021-11-09 22:19:57
【问题描述】:

我有 3 列(id、Name、Occurrence)的表,我想根据 id 列更新 Occurrence 列,并附上 snap 以供参考。

例如,如果我的 id 列有 3 次“606”值,那么我的出现列应该有 3 对所有“606”值。

下面是我尝试过的方法。

我尝试使用 group byHaving 子句查找重复值并将其保存在临时表中,然后我尝试从临时表中加入表值。

【问题讨论】:

  • 根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。并且请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
  • 该操作实际上确实发布了他尝试过的内容。它不是代码形式,实际上也不需要,因为他在最后一段中发布的内容非常清楚地表明他确实尝试过。

标签: sql sql-server tsql ssis


【解决方案1】:

为此,您可以在可更新的 CTE 中使用 窗口函数

您没有提供任何实际的样本数据,因此未经测试,但以下应该可以工作:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 2021-10-28
        • 2019-12-06
        • 2018-01-30
        • 1970-01-01
        • 2015-11-29
        相关资源
        最近更新 更多