如何使用 case when 獲得兩列的正確總和
P粉103739566
P粉103739566 2024-03-19 23:49:06
0
1
442

我正在開發一個程序,該程序將追蹤銷售人員銷售的單位,這些單位可以是完整交易 (1) 或半交易 (0.5)。我需要做的是找到一種方法來獲取按銷售人員 ID 分組的全部交易和一半交易的總和。

這是資料庫結構:

id salesperson_id salesperson_two_id 已售出日期
1 5 2022-07-02
2 3 5 2022-07-18
3 4 2022-07-16
4 5 3 2022-07-12
5 3 5 2022-07-17
6 5 2022-07-18

如果我只想檢索一位銷售人員的 SUM,我有一個有效的查詢:

SELECT
SUM(case when salesperson_id = 5 and isnull(salesperson_two_id) then 1 end) as fullDeals,
SUM(case when salesperson_id != 5 and salesperson_two_id = 5
或 salesperson_id = 5 and salesperson_two_id != 5 then 0.5 end) as halfDeals
FROM sold_logs WHERE MONTH(sold_date) = 07 AND YEAR(sold_date) = 2022;

輸出將如預期:

全部交易 一半交易
2 1.5

我想要完成的是為表中的所有銷售人員取得這些結果,但不知道如何實現它。這是我想要得到的結果:

salesperson_id 總交易
5 3.5
3 1.5
4 1

如果可能的話,我希望結果按總交易數排序。

P粉103739566
P粉103739566

全部回覆(1)
P粉590929392

使用 UNION ALL 取得包含每個銷售人員的所有行的結果集,篩選出您想要的月份並聚合:

SELECT salesperson_id,
       SUM(CASE WHEN salesperson_two_id IS NULL THEN 1 ELSE 0.5 END) totalDeals
FROM (
  SELECT salesperson_id, salesperson_two_id, sold_date FROM sold_logs
  UNION ALL
  SELECT salesperson_two_id, salesperson_id, sold_date FROM sold_logs WHERE salesperson_two_id IS NOT NULL
) t
WHERE MONTH(sold_date) = 7 AND YEAR(sold_date) = 2022
GROUP BY salesperson_id
ORDER BY totalDeals DESC;

查看演示

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板