我有兩張桌子。
一個有用戶 ID 和電子郵件(用戶表)。另一個具有來自 users 中的用戶 ID 的付款資訊(付款表)。
users
-------- ------------
| Userid | Name |
-------- ------------
| 1 | Alex T |
| 2 | Jeremy T |
| 3 | Frederic A |
-------- ------------
payments
-------- ----------- ------------ ----------
| Userid | ValuePaid | PaidMonths | Refunded |
-------- ----------- ------------ ----------
| 1 | 1 | 12 | null |
| 1 | 20 | 12 | null |
| 1 | 20 | 12 | null |
| 1 | 20 | 1 | null |
| 2 | 1 | 1 | null |
| 2 | 20 | 12 | 1 |
| 2 | 20 | 12 | null |
| 2 | 20 | 1 | null |
| 3 | 1 | 12 | null |
| 3 | 20 | 1 | 1 |
| 3 | 20 | 1 | null |
-------- ----------- ------------ ----------
我想考慮以下規則來計算 PaidMonths:
- 如果 ValuePaid < 10 PaidMonths 應該是 = 0.23(即使在列中看到的值是任何其他數字)。
- 如果 Refund=1,則 PaidMonths 應為 = 0。
基于此,當我按用戶 ID 加入兩個表,并根據之前的規則對 PaidMonths 求和時,我希望看到結果:
-------- ------------ ------------
| userid | Name | paidMonths |
-------- ------------ ------------
| 1 | Alex T | 25.23 |
| 2 | Jeremy T | 13.23 |
| 3 | Frederic A | 1.23 |
-------- ------------ ------------
你能幫我以最優雅的方式實作這一目標嗎?應該使用臨時表嗎?
uj5u.com熱心網友回復:
以下給出了您想要的結果,使用applywithcase expression來映射您的值:
select u.UserID, u.Name, Sum(pm) PaidMonths
from users u join payments p on p.userid=u.userid
cross apply (values(
case
when valuepaid <10 then 0.23
when Refunded=1 then 0
else PaidMonths end
))x(pm)
group by u.UserID, u.Name
見作業小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/371164.html
標籤:sql sql-server 查询语句
上一篇:組或交叉功能
