加入多个表并应用聚合给出错误的结果

Joining multiple tables and applying aggegate giving wrong result

我有一个业务案例,当 CountryId 传递到我的 proc 时,我需要获取在该国家/地区设立业务的所有区域、在该区域工作的所有活跃销售员工、完成的总销售额由该地区当前活跃的销售员工。

我的区域 table 如下所示。

RegionId | Name | CountryId 
    100      A      1          
    101      B      4          
    103      C      1

销售人员Table

Id | EmployeeId | RegionId
 1       250        100
 2       255        101
 3       289        101

员工Table

 EmployeeId | Active
    250          1
    255          1
    289          0
    314          1

销售额table

SaleId | EmployeeId| RegionId |     Sale
  1         100           2         3500
  2         101           4         2000
  3         100           2         1500

我的以下查询为我提供了正确的 TotalSales 值,但 TotalUsers 计数不匹配。

Select R.[RegionId], COUNT(SE.[UserId]) AS TotalUsers, SUM(S.[Sales]) AS TotalSales
        FROM dbo.[Region] R
        INNER JOIN [SalesEmployee] SE
        ON R.[RegionId] = SE.[RegionId]
        INNER JOIN dbo.[Employee] E
        ON E.[EmployeeId] = SE.[EmployeeId]
        LEFT JOIN dbo.[Sales] S
        ON S.[EmployeeId] = E.[EmployeeId]
        WHERE R.[CountryId] = 12 AND E.[Active] = 1
        GROUP BY R.[RegionId] 

对于 Ex RegionId 100,目前只有 7 名活跃的销售员工在工作,但结果是 89,在我的员工 table 中,可以有更多的用户,但其中很少有人可以不活跃,而且很少有人可能在另一个部门工作,为了确保员工是销售员工,员工需要出现在 SalesEmployee table 中,并检查员工是否活跃,我需要检查员工 table.

问题是 1 个用户在 sales table 中可以有多个条目正在上涨。

所以这实际上是一个简单的小修复。

Select R.[RegionId], COUNT(DISTINCT(SE.[UserId])) AS TotalUsers, SUM(S.[Sales]) AS TotalSales
        FROM dbo.[Region] R
        INNER JOIN [SalesEmployee] SE
        ON R.[RegionId] = SE.[RegionId]
        INNER JOIN dbo.[Employee] E
        ON E.[EmployeeId] = SE.[EmployeeId]
        LEFT JOIN dbo.[Sales] S
        ON S.[EmployeeId] = E.[EmployeeId]
        WHERE R.[CountryId] = 12 AND E.[Active] = 1
        GROUP BY R.[RegionId] 

这个小小的零钱会给你想要的。

COUNT(SE.[UserId])更改为COUNT(DISTINCT(SE.[UserId]))即可。