分组两次时将 COUNT 个相加 SQL 服务器

Adding COUNT together when grouping twice SQL Server

我目前有这些结果:

 SELECT P.[PersonID], P.PersonName AS [Name], MIN(P.Team) AS [Team], 
 COUNT( DISTINCT C.CustomerName) AS [Number Of Customers],
 SUM(F.Amount) AS [Amount]
 FROM Person P
 JOIN Figure F on P.PersonID =F.PersonFK
 JOIN Customer C ON C.CustomerFK = F.FigureID

 GROUP BY P.[PersonID],P.PersonName
 order by P.[PersonID]

结果:

PersonID    Name    Team    Number Of Customers    Daily Amount
   1        Ben      1              3                  30
   2        Sam      2              2                  30
   3        Tom      2              3                  30
   4        Fred     3              3                  30
   5        Alex     4              3                  30

现在我正在使用交叉应用到更多属于团队 2 的人

代码:

SELECT Z.[Person], MIN(P.Team) AS [Team], 
COUNT( DISTINCT C.CustomerName) AS [Number Of Customers],
SUM(F.Amount) AS [Amount]
FROM Person P
JOIN Figure F on P.PersonID =F.PersonFK
JOIN Customer C ON C.CustomerFK = F.FigureID

   cross apply (values
   (case when p.[Team] = '2' then 'Team 2'
   ELSE p.PersonName
   END)
   ) AS Z ([Person])

GROUP BY Z.[Person]
order by Z.[Person]

结果:

 Person   Team    Number Of Customers      Daily Amount 
 Alex      4               3                   30   
 Ben       1               3                   30   
 Fred      3               3                   30   
 Team 2    2               3                   60   

但是,我怎样才能将团队 2 的计数加在一起

例如

 Team 2    2               5                   60   

我知道必须将这一列相加,但我怎样才能在不影响其他计数的情况下做到这一点?到目前为止我还是找不到。谁能帮忙?谢谢

SQL FIDDLE - http://sqlfiddle.com/#!6/546b0/10

代码运行正常,因为您要求的是不同的客户。如果你想要不同的 customer/person 对,那么你需要为此编写逻辑:

select z.[Person], min(p.Team) AS [Team], 
       count(distinct p.PersonName + ':' + C.CustomerName) as [Number Of Customers],
       sum(f.Amount) AS [Amount]
from Person p join
     Figure f
     on P.PersonID = F.PersonFK join
     Customer C 
     on C.CustomerFK = F.FigureID cross apply 
     (values (case when p.[Team] = '2' then 'Team 2' else p.PersonName end)
     ) z (Person)
group by z.[Person]
order by z.[Person] ;

如果 SQL 服务器支持 COUNT(DISTINCT) 的多个参数就好了——就像其他一些数据库一样。将字符串连接在一起应该可以满足您的要求。

Here 就是 SQL Fiddle.