我有一个如下所示的数据集:
month year total_sales
01 2014 4567889
02 2014 5635627
03 2014 997673
04 2014 2134566
05 2014 2666477
我的目标是在上面的数据集上创建一个YTD函数。 例如:如果我想要显示01个月的数据,它应该给出01个月的总销售额。如果我想要显示02个月,它应该给我01 + 02个月的总销售额,以及其他月份的总销售额。
我写的查询如下:
select year, case when month in ('01') then 'JAN'
when month in ('01','02') then 'FEB'
-
-
-
when month in ('01','02','03','04','05') then 'MAY'
end as bucket, sum(total_sales) from <table_name>
group by year, case when month in ('01') then 'JAN'
when month in ('01','02') then 'FEB'
-
-
-
when month in ('01','02','03','04','05') then 'MAY'
end
它提取的结果集,不会将总销售额作为YTD函数加起来,而是仅显示该特定月份的总销售额。 我可以为所需的数据集创建数据透视表视图,但这不是我需要的方式,因为我需要在数据集上构建报告。
如果我错过了某些东西,有人可以帮我解决这个问题吗?
提前致谢。
答案 0 :(得分:0)
也许相关的子查询会有所帮助:
select t.*,
(select sum(total_sales)
from table t2
where t2.year = t.year and
t2.month <= t.month
) as YTD
from table t;
答案 1 :(得分:0)
这是另一种解决方案:
WITH months AS (
SELECT month, year
FROM <table_name>
)
SELECT m.month, m.year, SUM(t.total_sales)
FROM months m JOIN <table_name> t ON t.year=m.year AND t.month<=m.month
GROUP BY m.year, m.month
ORDER BY m.year, m.month;