【发布时间】:2025-12-29 23:15:12
【问题描述】:
我有一个名为History 的表,其中包含id, actiondate, status 列。
| ID | ActionDate | Status |
|---|---|---|
| 11 | 4/22/2021 | active |
| 11 | 4/25/2021 | Deactive |
我需要在 Oracle 的不同列中为一个 ID 向用户显示 activedate 和 deactivedate。
【问题讨论】:
我有一个名为History 的表,其中包含id, actiondate, status 列。
| ID | ActionDate | Status |
|---|---|---|
| 11 | 4/22/2021 | active |
| 11 | 4/25/2021 | Deactive |
我需要在 Oracle 的不同列中为一个 ID 向用户显示 activedate 和 deactivedate。
【问题讨论】:
你可以使用PIVOT:
SELECT *
FROM history
PIVOT (
MAX( ActionDate )
FOR Status IN (
'active' As active,
'Deactive' AS deactive
)
)
或条件聚合:
SELECT id,
MAX( CASE status WHEN 'active' THEN ActionDate END ) AS active,
MAX( CASE status WHEN 'Deactive' THEN ActionDate END ) AS Deactive
FROM history
GROUP BY
id;
其中,对于样本数据:
CREATE TABLE history ( ID, ActionDate, Status ) AS
SELECT 11, DATE '2021-04-22', 'active' FROM DUAL UNION ALL
SELECT 11, DATE '2021-04-25', 'Deactive' FROM DUAL
输出:
ID ACTIVE DEACTIVE 11 2021-04-22 00:00:00 2021-04-25 00:00:00
db小提琴here
【讨论】: