如何为select语句返回的一系列唯一ID返回最常用的值

时间:2016-12-28 15:21:35

标签: sql tsql select merge count

我有一系列select语句,它们根据Group By Query中的几个where子句返回一个唯一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

TeamA值与TableTypeID一起存在于TableA中,但是对于相同的Doctype ID,可能存在不同的TeamName值,因此我需要提取最常用的值(即非NULL)。

我可以用这样的东西确定最常见的价值 -

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

但是在尝试使用TeamName值更新输出表时我正在努力。我没有成功地尝试合并表,但不确定这是否是正确的方法。

对模糊的道歉,正确方向上的一点将非常感激。如有必要,可以提供更多细节

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以使用相关子查询或apply

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;

注意:如果多个团队频繁出现,则可以任意选择一个团队。