使用聚合函数但不希望按特定列进行分组

时间:2014-04-05 13:31:47

标签: sql-server-2008 aggregate-functions calculated-columns

当我这样做时:

select firstpartno,count(firstpartno) 
from dbo.vw_Split4 
group by firstpartno

效果很好。

Mow我想要两个新列nMaleCountnFemaleCount。这些将分别是M和F的计数(firstpartno)。但伯爵强迫我按性别分组,这是我不想要的。我想做所有这些并拥有我的四个专栏,但仅限于firstpartno。请帮忙!

vw_Split4如下:

firstpartno     Sex
     1           M
     2           F
     2           F
     3           M
     5           M
     2           M

我希望它之后是这样的:

firstpartno     Sex     nMaleCount     nFemaleCount
     1           M
     2           F
     2           F
     3           M
     5           M
     2           M

非常感谢提前!

2 个答案:

答案 0 :(得分:0)

您可以在CASE声明中使用SUM:

select firstpartno
      ,count(firstpartno)
      ,sum(case when sex = 'm' then 1 else 0 end) nMaleCount
  from dbo.vw_Split4 
 group by firstpartno

答案 1 :(得分:0)

如果我理解你的问题,你宁可这样做:

SELECT firstpartno, Sex, COUNT(firstpartno)
GROUP BY firstpartno, Sex

除非您因某种原因想将M和F的计数除以2列......