如何选择不在group by子句中的列名

时间:2015-11-09 17:28:15

标签: sql-server subquery

SELECT  [a],[b],[c],COUNT(*) AS Hits
FROM [dbo].[ta] join [dbo].[tb] on [tb].[id] = [ta].[id] 
where GROUP BY [a],[b],[c] 

我想选择列c,但不是按照cluase分组? 因为专栏" c"如分组

那样,返回一个不太过分的记录

我当前的查询是

SELECT top 20 [headshot],
              [athleteId],
              [athleteName],
              COUNT() AS Hits 
    FROM [dbo].[tblRep_Usecase2] 
    join [dbo].[tblRep_Login] on [tblRep_Login].[ID] = [tblRep_Usecase2].[ID] 
    where athleteName != 'NULL' 
    and headshot != 'NULL' 
    and headshot != '' 
    and convert(date,[tblRep_Usecase2].[insertDate]) >='11/9/2015' 
    and convert(date,[tblRep_Usecase2].[insertDate]) <='11/9/2015' 
    and [tblRep_Usecase2].[appsportid]='41' 
GROUP BY [headshot],[athleteId],[athleteName] 
HAVING COUNT()>1 order by Hits DESC 

1 个答案:

答案 0 :(得分:0)

简短回答:你不能。

更长的答案:您必须应用公式来定义&#34; c&#34;数据受到歧视。

例如,如果你有一个关于孩子的表,比如

|a      |b      |c        |
|-------|-------|---------|
|Bob    |Sarah  |Amanda   |
|Bob    |Sarah  |Steve    |
|Bob    |Amanda |Sarah Jr.|

你问他每对夫妇的孩子数量(所以Bob + Sarah = 2,Bob + Amanda = 1),但是你也问他一个孩子的名字。由于他不能告诉你你想要哪个孩子,他不能把你的结果告诉你。

在这种情况下,也许Bob,Sarah,Amada,Steve和Sarah Jr在他们年龄的其他地方的桌子上。因此,如果您只想要年龄最大的孩子,则需要返回a,b,&#34;子查询&#34;,&#34; count&#34;。根据具体情况,MAX / MIN等简单的聚合函数也可以使用。