CREATE TABLE region (
region_name VARCHAR2(255),
region_date DATE
);
INSERT INTO region VALUES('Paris','23-01-19');
INSERT INTO region VALUES('Paris','28-01-19');
INSERT INTO region VALUES('France','23-01-20');
INSERT INTO region VALUES('France','22-07-21');
INSERT INTO region VALUES('France','21-01-21');
INSERT INTO region VALUES('Germany','25-01-22');
COMMIT;
我需要一個我需要的SELECT查詢,DISTINCT region_name并且基于region_date. SELECT查詢應該有 4 列作為 region_name year_1 year_2 year_3 其中 year_1、year_2 和 year_3 列標題是靜態的,但值將是動態的。根據 region_name,我需要一個 COUNT 的 region_date,即同一年有多少個地區。唯一的挑戰是結果應該只包含從當年起最近 3 年的資料。假設在我的示例資料中,我只需要顯示從當前日期(即到 2020 年)不到 3 年的那些 COUNT。因此,根據示例資料,它應該顯示如下所示的結果:
------------- -------- -------- --------
| REGION_NAME | Year_1 | Year_2 | Year_3 |
------------- -------- -------- --------
| Paris | 2 | 0 | 0 |
| France | 0 | 1 | 2 |
| Germany | 0 | 0 | 0 |
------------- -------- -------- --------
假設我們在 2023 年,那么在這種情況下,它應該給我最近 3 年的資料,即到 2021 年。
uj5u.com熱心網友回復:
您可以使用條件聚合,例如
SELECT region_name,
SUM(CASE
WHEN TO_CHAR(region_date, 'yyyy') = TO_CHAR(sysdate, 'yyyy') - 2 THEN
1
ELSE
0
END) AS Year_1,
SUM(CASE
WHEN TO_CHAR(region_date, 'yyyy') = TO_CHAR(sysdate, 'yyyy') - 1 THEN
1
ELSE
0
END) AS Year_2,
SUM(CASE
WHEN TO_CHAR(region_date, 'yyyy') = TO_CHAR(sysdate, 'yyyy') THEN
1
ELSE
0
END) AS Year_3
FROM region
GROUP BY region_name
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/441845.html
