我已经搜索并尝试了一些我发现的东西的变化,但我对我觉得应该很容易的东西感到困惑。
示例数据包括:
地点、销售额、月份、年份 地点 1, 100, 4, 2012 地点 1, 130, 4, 2013
我正在尝试编写一个 Select 语句,该语句将允许我显示上月/年的销售额与当前月/年的销售额。
理想情况下,结果将如下所示:
地点,[2012 年 4 月销售],[2013 年 4 月销售] 位置 1、100、130
任何帮助表示赞赏。
我已经搜索并尝试了一些我发现的东西的变化,但我对我觉得应该很容易的东西感到困惑。
示例数据包括:
地点、销售额、月份、年份 地点 1, 100, 4, 2012 地点 1, 130, 4, 2013
我正在尝试编写一个 Select 语句,该语句将允许我显示上月/年的销售额与当前月/年的销售额。
理想情况下,结果将如下所示:
地点,[2012 年 4 月销售],[2013 年 4 月销售] 位置 1、100、130
任何帮助表示赞赏。
您没有指定您使用的数据库,但您可以使用聚合函数将行数据转换为列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;
作为旁注,您不应该将month
and存储year
在单独的列中。您应该存储一个日期时间列。
您可以在相同的位置和月份,但在上一年将表格与自身连接起来。
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