2016-12-28 2 views
1

Group By Queryで出力テーブルにいくつかのwhere句に基づいて一意のIDのリストを返す一連のselect文があります。select文で返される一意のIDの範囲で最も頻繁に値を返す方法

また、出力テーブルにIDが存在するテーブルの中で、最も頻繁に使用されるTeamName値を選択できます。

出力テーブルすなわち

DocTypeID  |  No Source | No Date  |  No RefNo  | TeamName 
--------------- |---------------- |------------- |------------------| ------------- 
926c4185  |  2  | 1   |  69   |  NULL 
bff5be99  |  3  | 3   |  5368   |  NULL  
a04d4rf   |  NULL  | NULL  |  26   |  NULL 

TEAMNAME値(DocTypeIDと共にテーブルAに存在するが、私は最頻値を引き出す必要がある理由従って同じのDOCTYPE IDに対して異なるTEAMNAME値が存在することができることを示しますこれはNULLではありません)。

私はこのようなもので最も多い値を確認することができる -

select top 1 [TeamName] , count([TeamName]) 'count' 
from Documents    
where DocTypeID = '926c4185' 
group by [TeamName] 
order by count desc 

しかしTEAMNAME値で出力テーブルを更新しようとしたときに苦労しています。私はうまくいけばテーブルをマージしようとしましたが、これが正しい方法であるかどうかはわかりません。

曖昧さに対する謝罪、正しい方向のポイントは非常に高く評価されます。

select ot.*, d.TeamName 
from outputtable ot outer apply 
    (select top 1 d.TeamName, count(*) as cnt 
     from Documents d   
     where d.DocTypeID = ot.DocTypeId 
     group by d.TeamName 
     order by cnt desc 
    ) d; 

注:私が正しく理解していれば、あなたは相関サブクエリまたはapplyを使用することができます

答えて

1

必要に応じて詳細を提供することができる複数のチームが同じように頻繁に表示された場合は、1が任意に選択されます。