在SQL中显示年度结果

时间:2013-04-16 19:50:31

标签: sql sql-server

我搜索并尝试了一些我发现的东西的变化,但是我觉得我觉得应该很容易。

示例数据包括:

LOCATION,  SALES, MONTH, YEAR
Location1, 100,   4,     2012
Location1, 130,   4,     2013

我正在尝试编写一个Select语句,允许我显示上个月/年的销售额与当前月/年的比较。

理想情况下,结果如下:

LOCATION, [4/2012 Sales], [4/2013 Sales]
Location1, 100, 130

感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

您没有指定正在使用的数据库,但可以使用带有CASE的聚合函数将行数据转换为列:

select location,
  sum(case when year = 2012 and month = 4 then sales end) Sales_042012,
  sum(case when year = 2013 and month = 4 then sales end) Sales_042013
from yt
group by location;

请参阅SQL Fiddle with Demo

作为旁注,您不应将monthyear存储在不同的列中。您应该存储日期时间列。

答案 1 :(得分:5)

你可以在同一个地点和月份加入桌子,但是去年。

declare @tbl table (location varchar(50), sales int, mth int, yr int)
insert @tbl values ('loc1', 100, 4, 2012)
insert @tbl values ('loc1', 110, 5, 2012)
insert @tbl values ('loc1', 120, 6, 2012)
insert @tbl values ('loc1', 130, 7, 2012)
insert @tbl values ('loc1', 140, 8, 2012)
insert @tbl values ('loc1', 200, 4, 2013)
insert @tbl values ('loc1', 210, 5, 2013)
insert @tbl values ('loc1', 220, 6, 2013)
insert @tbl values ('loc1', 230, 7, 2013)
insert @tbl values ('loc1', 240, 8, 2013)

select t1.location, t1.mth, t1.yr, t1.sales [curr_sales], t2.sales [prev_sales]
from @tbl t1
left join @tbl t2
    on t1.location = t2.location    
    and t1.mth = t2.mth
    and t1.yr - 1 = t2.yr