2016-08-04 10 views
2

内のデータのほとんどの回出てくるの決定の私は、次があるとしましょう:SQL Serverは、グループ

COL1  COL2  COL3 

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

私は、そのグループのためにCOL3にグループの中で最も頻繁に発生する値を伝搬するためにSQLを使用したいです。だから、私の結果は次のようになります:

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

+5

これまでに何を試みましたか?私たちはコードを修正するのを手伝いますが、私たちはあなたの問題を解決するためのものではありません。 –

+0

結びつきはどのように解決されましたか? – Beth

+0

申し訳ありませんが、私はちょうどどこから始めるべきかわかりませんでした – MichaelTFL

答えて

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 
+0

ありがとう!これはとても役に立ちました! – MichaelTFL

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 
+0

ありがとう!私が開発した答えは、これら両方の答えの組み合わせでした。 – MichaelTFL

0

ありがとう!私はそれを働かせるために答えの組み合わせを使いました。ここに私が思いついたのは、

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 
関連する問題