SQL Server确定组中的大多数数据

时间:2016-08-04 17:38:09

标签: 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     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。

2 个答案:

答案 0 :(得分:0)

;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

答案 1 :(得分:0)

我会这样写:

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