[英]TSQL - Return Records for each of the Months between Start and End Dates even if no data available for that month
我當前的SELECT查詢結果如下
SELECT Category, MonthYear, Percentage
FROM #Result
使用@StartDate
作為2018-12-01和@EndDate作為2019-05-01
Category | MonthYear | Percentage
----------+------------+------------
Category1 | 2018-12-01 | 80
Category1 | 2019-01-01 | 70
Category1 | 2019-02-01 | 75
Category1 | 2019-03-01 | 60
Category1 | 2019-04-01 | 45
Category1 | 2019-05-01 | 29
Category2 | 2019-03-01 | 78
Category2 | 2019-04-01 | 95
Category2 | 2019-05-01 | 98
但是我希望我的結果是每個Categories
@StartDate
和@EndDate
之間的所有月份的百分比值為零(如果該類別沒有數據)。
Category | MonthYear | Percentage
----------+------------+------------
Category1 | 2018-12-01 | 80
Category1 | 2019-01-01 | 70
Category1 | 2019-02-01 | 75
Category1 | 2019-03-01 | 60
Category1 | 2019-04-01 | 45
Category1 | 2019-05-01 | 29
Category2 | 2018-12-01 | 0
Category2 | 2019-01-01 | 0
Category2 | 2019-02-01 | 0
Category2 | 2019-03-01 | 78
Category2 | 2019-04-01 | 95
Category2 | 2019-05-01 | 98
您可以使用遞歸CTE生成日期。 然后使用cross join
和left join
引入數據。 所以:
with dates as (
select min(monthyear) as yyyymm, max(monthyear) as max_yyyymm
from t
union all
select dateadd(month, 1, yyyymm), max_yyyymm
from dates
where yyyymm < max_yyyymm
)
select c.category, d.yyyymm, coalesce(t.percentage, 0) as percentage
from (select distinct category from t) c cross join
dates d left join
t
on t.category = c.category and t.monthyear = d.yyyymm
order by c.category, d.yyyymm;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.