我想計算根據用戶和服務系列分組的費用總和。我想知道,如何將“收費”加入用戶表?
我有一個用戶表:
| u_id | 報價_1 | 報價_2 | 報價_3 |
|---|---|---|---|
| 101 | 11 | ||
| 101 | 12 | 13 | |
| 101 | 12 | ||
| 101 | 13 | ||
| 201 | 22 | 32 | 33 |
事務表:
| u_id | offer_id | 收費 |
|---|---|---|
| 101 | 11 | 150 |
| 101 | 12 | 150 |
| 101 | 13 | 200 |
| 201 | 22 | 300 |
| 201 | 32 | 100 |
| 201 | 33 | 45 |
我的預期表是:
| u_id | 報價_1 | 報價_2 | 報價_3 | 收費 |
|---|---|---|---|---|
| 101 | 11 | 150 | ||
| 101 | 12 | 13 | 350 | |
| 101 | 12 | 150 | ||
| 101 | 13 | 200 | ||
| 201 | 22 | 32 | 33 | 445 |
我嘗試了標準 sum() 函式:
select u.u_id,u.offer_1,u.offer_2,u.offer_3,sum(t.charge)
from user u
left join transaction t on u.offer_1 = t.offer_id or u.offer_2 = t.offer_id or u.offer_2 = t.offer_id
group by u.u_id,u.offer_1,u.offer_2,u.offer_3
你能幫助我嗎?
uj5u.com熱心網友回復:
測驗資料(注意我在第一個表中添加了一行包含所有null報價,以測驗該案例的正確性):
create table user_tbl (u_id, offer_1, offer_2, offer_3) as
select 101, 11, null, null from dual union all
select 101, null, 12, 13 from dual union all
select 101, null, 12, null from dual union all
select 101, null, null, 13 from dual union all
select 201, 22, 32, 33 from dual union all
select 201, null, null, null from dual
;
create table transactions (u_id, offer_id, change) as
select 101, 11, 150 from dual union all
select 101, 12, 150 from dual union all
select 101, 13, 200 from dual union all
select 201, 22, 300 from dual union all
select 201, 32, 100 from dual union all
select 201, 33, 45 from dual
;
查詢和輸出:
with
prep (rn, u_id, offer_1, offer_2, offer_3, o1, o2, o3) as (
select rownum, u_id, offer_1, offer_2, offer_3, offer_1, offer_2, offer_3
from user_tbl
)
select u_id, offer_1, offer_2, offer_3, nvl(sum(change), 0) as change
from prep
unpivot include nulls (offer_id for col in (o1, o2, o3))
left outer join transactions using (u_id, offer_id)
group by u_id, offer_1, offer_2, offer_3, rn
;
U_ID OFFER_1 OFFER_2 OFFER_3 CHANGE
---------- ---------- ---------- ---------- ----------
101 11 150
101 12 150
101 12 13 350
101 13 200
201 22 32 33 445
201 0
u_idUnpivoting 將資料帶入更熟悉的形式,每個組合和“offer”都有一行。聯接是外部聯接有兩個原因:既因為取消透視可能會生成null報價,也因為非報價可能在表null中沒有匹配項。transactions(就此而言, au_id可能在那里也沒有匹配項。)其余的就是您所期望的 - 外連接和聚合 - 并nvl在主選擇中使用,假設change應該顯示為零(而不是 null)一行顯示沒有實際報價。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448754.html
上一篇:使用特定選擇串列插入SQL
