在Sybase Sql中进行案例声明分组

时间:2014-06-12 21:31:46

标签: sql sqlanywhere sybase-asa

我有一个如下所示的数据集:

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函数加起来,而是仅显示该特定月份的总销售额。 我可以为所需的数据集创建数据透视表视图,但这不是我需要的方式,因为我需要在数据集上构建报告。

如果我错过了某些东西,有人可以帮我解决这个问题吗?

提前致谢。

2 个答案:

答案 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;