【发布时间】:2019-02-08 12:34:08
【问题描述】:
我有按年和季度划分的销售数据,我想用最后可用值来填补缺失的季度。
假设我们有源表:
+------+---------+-------+--------+
| year | quarter | sales | row_no |
+------+---------+-------+--------+
| 2018 | 1 | 4000 | 5 |
| 2018 | 2 | 6000 | 4 |
| 2018 | 3 | 5000 | 3 |
| 2018 | 4 | 3000 | 2 |
| 2019 | 1 | 8000 | 1 |
+------+---------+-------+--------+
期望的结果:
+------+---------+-------+------------------------+
| year | quarter | sales | |
+------+---------+-------+------------------------+
| 2018 | 1 | 4000 | |
| 2018 | 2 | 6000 | |
| 2018 | 3 | 5000 | |
| 2018 | 4 | 3000 | |
| 2019 | 1 | 8000 | |
| 2019 | 2 | 8000 | <repeat the last value |
| 2019 | 3 | 8000 | <repeat the last value |
| 2019 | 4 | 8000 | <repeat the last value |
+------+---------+-------+------------------------+
因此,任务是使年份和季度的笛卡尔坐标系,然后将相应的或最后的销售额加入其中。
这段代码让我快到了:
select r.year, k.quarter, t.sales
from (select distinct year from [MyTable]) r cross join
(select distinct quarter from [MyTable]) k left join
[MyTable] t
on (r.year = t.year and k.quarter=t.quarter) or row_no=1
如何更正最后一行(加入条件)使2018不翻倍?
【问题讨论】:
标签: sql sql-server join