Sql 合并行并取平均值

Sql 合并行并取平均值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张看起来像的桌子 我想将N行和M行连接在一起,称之为X,取max1和max2的最大值,同时取各自列中avg1、avg2和numb的平均值返回 #Sector max1 avg1 max2 avg2 numb C 133 14 45 3 27 X 174 6 77 2 17 试着这样做: select sector, max1,avg1,max2,avg2,numb from tab

我有一张看起来像的桌子

我想将N行和M行连接在一起,称之为X,取max1和max2的最大值,同时取各自列中avg1、avg2和numb的平均值返回

#Sector  max1   avg1   max2  avg2  numb
C         133    14     45    3     27
X         174     6     77    2     17
试着这样做:

select sector, max1,avg1,max2,avg2,numb
from tab
where sector not in ('M','N')
union all
select 'X' as sector, max(max1),avg(avg1),max(max2),avg(avg2),avg(numb)
from tab
where sector in ('M','N')
试着这样做:

select sector, max1,avg1,max2,avg2,numb
from tab
where sector not in ('M','N')
union all
select 'X' as sector, max(max1),avg(avg1),max(max2),avg(avg2),avg(numb)
from tab
where sector in ('M','N')
比如:

select 
  case when sector in ('N','M') then 'X' else sector end sect,
  max(max1) max1,
  avg(avg1) avg1,
  max(max2) max2,
  avg(avg2) avg2,
  avg(numb) numb
from tabname 
group by 
  case when sector in ('N','M') then 'X' else sector end
比如:

select 
  case when sector in ('N','M') then 'X' else sector end sect,
  max(max1) max1,
  avg(avg1) avg1,
  max(max2) max2,
  avg(avg2) avg2,
  avg(numb) numb
from tabname 
group by 
  case when sector in ('N','M') then 'X' else sector end

需要联合
C
的记录,或者重构以将
放入组中,而不是WHERE子句。OP希望C行保留在结果中。@PM77-1感谢您的评论@马特贝利:是的@用户2573999我很高兴能帮助你。不要忘记接受答案,以避免低接受率,并结束问题。您也可以投票支持答案;)需要联合
C
的记录,或者重构以将
放入组中,而不是WHERE子句。OP希望C行保留在结果中。@PM77-1感谢您的评论@马特贝利:是的@用户2573999我很高兴能帮助你。不要忘记接受答案,以避免低接受率,并结束问题。您也可以投票支持答案;)你不能按门派分组吗?啊哈。谢谢——过去一年我一直在使用PostgreSQL,所以我的MSSQL学习开始褪色。因此,
按1分组(列位置)也是可能的,但是如果查询被更改并且返回的列被移动,那么以后很容易出现问题……难道你不能
按节分组吗?
?啊哈。谢谢——过去一年我一直在使用PostgreSQL,所以我的MSSQL学习开始褪色。因此,
groupby1
(列位置)也是可能的,但是如果查询被更改,并且返回的列被移动,则很容易出现问题。。。