-3

我已经搜索并尝试了一些我发现的东西的变化,但我对我觉得应该很容易的东西感到困惑。

示例数据包括:

地点、销售额、月份、年份
地点 1, 100, 4, 2012
地点 1, 130, 4, 2013

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

理想情况下,结果将如下所示:

地点,[2012 年 4 月销售],[2013 年 4 月销售]
位置 1、100、130

任何帮助表示赞赏。

4

2 回答 2

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

作为旁注,您不应该将monthand存储year在单独的列中。您应该存储一个日期时间列。

于 2013-04-16T19:55:19.773 回答
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
于 2013-04-16T19:55:06.420 回答