【问题标题】:How to return the most frequent value for a range of unique ID's returned by a select statement如何返回 select 语句返回的一系列唯一 ID 的最频繁值
【发布时间】:2017-05-12 21:46:52
【问题描述】:

我有一系列 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

TeamName 值与 DocTypeID 一起存在于 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 值更新输出表时遇到了困难。我没有成功尝试合并表,但不确定这是否是正确的方法。

对含糊不清表示歉意,非常感谢您指出正确的方向。如有需要可以提供更多细节

【问题讨论】:

    标签: sql tsql select merge count


    【解决方案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;
    

    注意:如果多个团队出现的频率相同,则任意选择一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多