CREATE TABLE region (
region_name VARCHAR2(255),
region_date DATE
);
INSERT INTO region VALUES('Paris','23-01-15');
INSERT INTO region VALUES('Paris','28-01-15');
INSERT INTO region VALUES('France','23-01-16');
INSERT INTO region VALUES('France','22-07-17');
INSERT INTO region VALUES('France','21-01-17');
INSERT INTO region VALUES('Germany','25-01-18');
COMMIT;
我需要一個我需要的SELECT查詢,DISTINCT region_name并且基于region_date. SELECT查詢應該有 5 列,region_name year_1 year_2 year_3 year_4其中year_12015year_2是 2016 等等。基于region_name我需要一個有COUNT多少region_date地區在同一年下降。以下是我的預期結果
| REGION_NAME | Year_1 | Year_2 | Year_3 | Year_4 |
|---|---|---|---|---|
| 巴黎 | 2 | 0 | 0 | 0 |
| 法國 | 0 | 1 | 2 | 0 |
| 德國 | 0 | 0 | 0 | 1 |
對于巴黎 - Year_1 - 它有 2 條記錄,因此 year_1 的計數為 2,其余為 0。同樣,對于所有人。我想知道這是否可以做到。
注意:我必須將報告限制在 2018 年之前。如果 2018 年之后有任何事情發生,那么這將包含在報告中
使用的工具:SQL Developer(18c)
uj5u.com熱心網友回復:
假設結果集中固定為 4 年,我們可以嘗試以下樞軸查詢:
SELECT
region_name,
COUNT(CASE WHEN EXTRACT(year FROM region_date) = 2015 THEN 1 END) AS Year_1,
COUNT(CASE WHEN EXTRACT(year FROM region_date) = 2016 THEN 1 END) AS Year_2,
COUNT(CASE WHEN EXTRACT(year FROM region_date) = 2017 THEN 1 END) AS Year_3,
COUNT(CASE WHEN EXTRACT(year FROM region_date) = 2018 THEN 1 END) AS Year_4
GROUP BY
region_name;
uj5u.com熱心網友回復:
您可以使用 pivot 來執行此操作:
模式和插入陳述句:
CREATE TABLE region (
region_name VARCHAR2(255),
region_date DATE
);
INSERT INTO region VALUES('Paris','23-JAN-15');
INSERT INTO region VALUES('Paris','28-JAN-15');
INSERT INTO region VALUES('France','23-JAN-16');
INSERT INTO region VALUES('France','22-JUL-17');
INSERT INTO region VALUES('France','21-JAN-17');
INSERT INTO region VALUES('Germany','25-JAN-18');
詢問:
select * from
(SELECT region_name, extract(year from region_date)yr FROM region )
pivot
(
COUNT(*) for yr in (2015,2016,2017,2018)
)
輸出:
| REGION_NAME | 2015 | 2016 年 | 2017 | 2018 |
|---|---|---|---|---|
| 巴黎 | 2 | 0 | 0 | 0 |
| 法國 | 0 | 1 | 2 | 0 |
| 德國 | 0 | 0 | 0 | 1 |
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/442067.html
