假設我有下一張桌子:
| ID_1 | ID_2 | 價值 |
|---|---|---|
| 1 | 11 | 一個 |
| 2 | 12 | 一個 |
| 2 | 13 | 一個 |
| 2 | 13 | 乙 |
| 3 | 12 | 一個 |
| 3 | 13 | 乙 |
我想將其轉換為:
| ID_1 | ID_2 | 值_A | 值_B |
|---|---|---|---|
| 1 | 11 | 1 | 0 |
| 2 | 12 | 1 | 0 |
| 2 | 13 | 1 | 1 |
| 3 | 12 | 1 | 0 |
| 3 | 13 | 0 | 1 |
- 當有值 A 但沒有值 B 時,將 0 放入值 B
- 當有值 B 但沒有值 A 時,將 0 放入值 A
我怎樣才能在oracle中做到這一點?
uj5u.com熱心網友回復:
使用PIVOT:
SELECT *
FROM table_name
PIVOT ( COUNT(*) FOR value IN ('A' AS Value_A, 'B' AS Value_B) )
其中,對于樣本資料:
CREATE TABLE table_name (ID_1, ID_2, Value) AS
SELECT 1, 11, 'A' FROM DUAL UNION ALL
SELECT 2, 12, 'A' FROM DUAL UNION ALL
SELECT 2, 13, 'A' FROM DUAL UNION ALL
SELECT 2, 13, 'B' FROM DUAL UNION ALL
SELECT 3, 12, 'A' FROM DUAL UNION ALL
SELECT 3, 13, 'B' FROM DUAL;
輸出:
| ID_1 | ID_2 | VALUE_A | VALUE_B |
|---|---|---|---|
| 1 | 11 | 1 | 0 |
| 3 | 12 | 1 | 0 |
| 2 | 12 | 1 | 0 |
| 3 | 13 | 0 | 1 |
| 2 | 13 | 1 | 1 |
小提琴
uj5u.com熱心網友回復:
您可以使用以下解決方案來完成作業
select ID_1, ID_2
, decode(Value_A, null, 0, 1) Value_A
, decode(Value_B, null, 0, 1) Value_B
from your_Table t
pivot (
max(Value) for value in (
'A' as Value_A
, 'B' as Value_B
)
)
order by ID_1, ID_2
;
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506859.html
