我有這張桌子
| 顧客 | 數量 | 日期 | 時期 | 團體 |
|---|---|---|---|---|
| 77766 | 50 | 2022-02-28 | 1 | 2 |
| 77766 | 20 | 2022-03-31 | 2 | 2 |
| 77766 | 30 | 2022-04-30 | 3 | 3 |
| 12345 | 50 | 2022-02-28 | 1 | 1 |
| 12345 | 20 | 2022-03-31 | 2 | 2 |
| 12345 | 30 | 2022-04-30 | 3 | 3 |
并且我正在嘗試實作這種細分模型,在該模型中,我將一個組分配給每個客戶的相應期間
| 顧客 | 數量 | 日期 | 時期 | 團體 | Group_Period1 | Group_Period2 | Group_Period3 |
|---|---|---|---|---|---|---|---|
| 77766 | 50 | 2022-02-28 | 1 | 2 | 2 | 2 | 3 |
| 77766 | 20 | 2022-03-31 | 2 | 2 | 2 | 2 | 3 |
| 77766 | 30 | 2022-04-30 | 3 | 3 | 2 | 2 | 3 |
| 12345 | 50 | 2022-02-28 | 1 | 1 | 1 | 2 | 3 |
| 12345 | 20 | 2022-03-31 | 2 | 2 | 1 | 2 | 3 |
| 12345 | 30 | 2022-04-30 | 3 | 3 | 1 | 2 | 3 |
我嘗試了案例功能,但它沒有用
select a.*,
case when a.Period=1 then Group end Grupo1 ,
case when a.Period=2 then Group2 end Grupo2 ,
case when a.Period=3 then Group3
end Grupo3
from dual
我得到了這個輸出:
| 顧客 | 數量 | 日期 | 時期 | 團體 | Group_Period1 | Group_Period2 | Group_Period3 |
|---|---|---|---|---|---|---|---|
| 77766 | 50 | 2022-02-28 | 1 | 2 | 2 | 空值 | 空值 |
| 77766 | 20 | 2022-03-31 | 2 | 2 | 空值 | 2 | 空值 |
| 77766 | 30 | 2022-04-30 | 3 | 3 | 空值 | 空值 | 3 |
| 12345 | 50 | 2022-02-28 | 1 | 1 | 1 | 空值 | 空值 |
| 12345 | 20 | 2022-03-31 | 2 | 2 | 空值 | 2 | 空值 |
| 12345 | 30 | 2022-04-30 | 3 | 3 | 空值 | 空值 | 3 |
有人可以指導我實作預期嗎?謝謝你的建議
uj5u.com熱心網友回復:
您可以使用視窗函式,例如MAX() OVER ()帶有條件的Period列值,例如
SELECT *,
MAX(CASE WHEN Period=1 THEN `Group` END)
OVER (PARTITION BY Customer) AS Group_Period1,
MAX(CASE WHEN Period=2 THEN `Group` END)
OVER (PARTITION BY Customer) AS Group_Period2,
MAX(CASE WHEN Period=3 THEN `Group` END)
OVER (PARTITION BY Customer) AS Group_Period3
FROM t -- replace with your table's name
where 分組是通過使用PARTITION BY子句來計算的
Demo
uj5u.com熱心網友回復:
一種方法可以通過行內子查詢。
select *,
(select group_1 from cust a where a.customer = b.customer and period=1) Group_Period1,
(select group_1 from cust a where a.customer = b.customer and period=2) Group_Period2,
(select group_1 from cust a where a.customer = b.customer and period=3) Group_Period3
from cust b;
在這里提琴
uj5u.com熱心網友回復:
您可以SELF INNER JOIN將客戶識別符號上的 a 與陳述句結合使用,該IF陳述句將檢查相應期間(根據欄位為 1、2 或 3)。然后MAX聚合函式將洗掉 NULL 值。
SELECT t1.Customer,
t1.Amount,
t1.Date,
t1.Period,
t1.Group,
MAX(IF(t2.Period = 1, t2.Group, NULL)) AS PeriodGroup1,
MAX(IF(t2.Period = 2, t2.Group, NULL)) AS PeriodGroup2,
MAX(IF(t2.Period = 3, t2.Group, NULL)) AS PeriodGroup3
FROM tab t1
INNER JOIN tab t2
ON t1.Customer = t2.Customer
GROUP BY t1.Customer,
t1.Amount,
t1.Date,
t1.Period,
t1.Group
在這里試試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474793.html
上一篇:如何修復密碼以在mysql中讀取
下一篇:如何對某些重復資料求和?
