Saya memiliki kasus bisnis di mana ketika CountryId diteruskan ke proc saya, saya perlu mendapatkan semua Wilayah tempat Bisnis didirikan di negara itu, Semua Karyawan Penjualan Aktif yang bekerja di Wilayah itu, Total penjualan yang dilakukan oleh penjualan aktif saat ini karyawan di wilayah tersebut.

Tabel Wilayah saya terlihat seperti di bawah ini.

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

Meja Karyawan Penjualan

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

Meja Karyawan

 EmployeeId | Active
    250          1
    255          1
    289          0
    314          1

Meja penjualan

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

Permintaan saya di bawah ini memberi saya nilai TotalSales yang benar tetapi jumlah TotalUsers tidak cocok.

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] 

Untuk Ex RegionId 100 hanya memiliki 7 karyawan penjualan aktif yang saat ini bekerja tetapi hasilnya memberi saya 89, di tabel Karyawan saya mungkin ada lebih banyak pengguna tetapi sedikit dari mereka yang tidak aktif dan beberapa dari mereka mungkin bekerja di departemen lain, untuk memastikan bahwa karyawan tersebut adalah karyawan penjualan karyawan tersebut harus hadir di tabel SalesEmployee dan untuk memeriksa apakah Karyawan tersebut Aktif saya perlu memeriksa di tabel Karyawan.

Masalahnya adalah 1 pengguna tunggal dapat memiliki beberapa entri pada namanya di tabel penjualan, jadi ketika saya bergabung dengan tabel Penjualan yang memiliki banyak entri pada satu pengguna maka jumlah TotalEmployees akan naik.

1
claudia 19 November 2020, 23:02

1 menjawab

Jawaban Terbaik

Jadi sebenarnya ini adalah perbaikan kecil yang mudah.

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] 

Perubahan kecil ini akan memberikan apa yang Anda inginkan.

Anda hanya perlu mengubah COUNT(SE.[UserId]) menjadi COUNT(DISTINCT(SE.[UserId])).

0
Mau5 19 November 2020, 20:25