按特定规则将年度数据转换为季度数据

问题描述 投票:0回答:2

我正在使用 SQL,需要将每年可用的数据转换为季度数据,但有一些特定的规则。例如,在源数据中我有一条 2020 年的记录,我需要将其转换为 2022Q3、2022Q4、2023Q1、2023Q2 的 4 条记录。我已经附上了我正在寻找之前和之后的照片。

实际数据

| year | FIPS  | PercentagePopulation | NumberOfPeople |
|------|-------|----------------------|----------------|
| 2019 | 45001 | 11.40%              | 90000          |
| 2020 | 45001 | 12.10%              | 100000         |

预期结果

| YearQtr | FIPS  | PercentagePopulation | NumberOfPeople |
|---------|-------|----------------------|----------------|
| 2021Q4  | 45001 | 11.40%              | 90000          |
| 2021Q3  | 45001 | 11.40%              | 90000          |
| 2021Q2  | 45001 | 11.40%              | 90000          |
| 2021Q1  | 45001 | 11.40%              | 90000          |
| 2022Q4  | 45001 | 12.10%              | 100000         |
| 2022Q3  | 45001 | 12.10%              | 100000         |
| 2022Q2  | 45001 | 12.10%              | 100000         |
| 2022Q1  | 45001 | 12.10%              | 100000         |
sql date-conversion
2个回答
0
投票

使用它,您可以添加任意数量的年份并连接年份和季度

https://dbfiddle.uk/UzE74umh

CREATE TABLE population (
    year INT,
    FIPS INT,
    PercentagePopulation VARCHAR(10),
    NumberOfPeople INT
);

INSERT INTO population (year, FIPS, PercentagePopulation, NumberOfPeople)
VALUES (2019, 45001, '11.40%', 90000),
       (2020, 4501, '12.10%', 100000);

SELECT p.year, q.quarter, p.FIPS, p.NumberOfPeople  NumberOfPeople, p.PercentagePopulation
  ,str(p.year+1)+'Q'+trim(str(q.quarter)) as inventedPeriod
FROM population p
CROSS JOIN (SELECT 1 AS quarter UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) q
ORDER BY year, quarter;
四分之一 FIPS 人数 人口百分比 发明时期
2019 1 45001 90000 11.40% 2020Q1
2019 2 45001 90000 11.40% 2020Q2
2019 3 45001 90000 11.40% 2020Q3
2019 4 45001 90000 11.40% 2020Q4
2020 1 4501 100000 12.10% 2021Q1
2020 2 4501 100000 12.10% 2021Q2
2020 3 4501 100000 12.10% 2021Q3
2020 4 4501 100000 12.10% 2021Q4

-1
投票

你能发布一个你必须使用的源数据的例子吗?您描述只有年度总数,没有按日期细分的数据。如果源数据不能归于时间点,那么可能无法准确地按季度分解原始值。

© www.soinside.com 2019 - 2024. All rights reserved.