Sql server SQL Server确定组中大多数数据的发生率

Sql server SQL Server确定组中大多数数据的发生率,sql-server,sql-server-2012,grouping,Sql Server,Sql Server 2012,Grouping,假设我有以下几点: COL1 COL2 COL3 ABC DATA1 ABC DATA1 ABC DATA2 ABC DATA3 DEF INFO1 DEF INFO2 DEF INFO3 DEF INFO3 我想使用SQL将组中最常出现的值传播到该组的COL3中。因此,我的结果是: COL1 COL2 COL

假设我有以下几点:

COL1      COL2     COL3  

ABC       DATA1      
ABC       DATA1      
ABC       DATA2  
ABC       DATA3  
DEF       INFO1  
DEF       INFO2  
DEF       INFO3  
DEF       INFO3  
我想使用SQL将组中最常出现的值传播到该组的COL3中。因此,我的结果是:

COL1      COL2     COL3  

ABC       DATA1    DATA1     
ABC       DATA1    DATA1  
ABC       DATA2    DATA1  
ABC       DATA3    DATA1  
DEF       INFO1    INFO3  
DEF       INFO2    INFO3  
DEF       INFO3    INFO3  
DEF       INFO3    INFO3  

有什么想法吗?SQL Server 2012。

我会这样写:

;With cte
as
(
col1,col2,row_number() over (partition by col1,col2 order by col1)  as rownum
)
select col1,col2,b.col2 as col3
from yourtable  t
cross apply
( select top1  col2 from cte c where c.col1=t.col1 order by rownum desc) b
UPDATE P SET P.Col3=T.Col2
FROM Propagation P
JOIN(
    SELECT TOP 1 WITH TIES Col1, Col2
    FROM Propagation
    GROUP BY Col1, Col2
    ORDER BY COUNT(*) DESC
    ) T ON T.Col1=P.Col1

谢谢大家!我用了一系列的答案让它起作用。以下是我的想法:

WITH OCCUR_EXT
  as
    (
     SELECT [COL1], [COL2], row_number() over (partition by [COL1], [COL2] order by [COL1]) as TOT_OCCUR
       FROM [T_TABLEDATA]
      WHERE [COL2] > ''
    ),

 DOM_ASSGN
  as
    (
     SELECT *
         FROM 
         (SELECT *, 
                row_number() 
           OVER
               (partition by [COL1] order by [COL1], TOT_OCCUR DESC) as ROW_NMBR
                     FROM OCCUR_EXT ) source
                    WHERE ROW_NMBR = 1
    )

UPDATE [T_TABLEDATA]
   SET [T_TABLEDATA].[COL3] = [DOM_ASSGN].[COL2]
  FROM [T_TABLEDATA], [DOM_ASSGN]
  WHERE [T_TABLEDATA].[COL1] = [DOM_ASSGN].[COL1]
  GO 

到目前为止你尝试了什么?我们帮助修复代码,我们不是来为您解决问题的。领带是如何解决的?对不起,马克-我只是不知道从哪里开始。领带很好-两种选择都同样有效谢谢!这很有帮助!谢谢我得出的答案是这两个答案的组合。