我正在重新提出我的问题。我有一个简单的表格如下:
Item Date QTY
Chair 12/6/08 69我喜欢使用SQL Server在Date列之前的三年和Date列之后的三年内从Item列中提取这些项。
例如,Chair项目,我想知道在2008年12月6日之前的三年内售出了多少椅子;在2008年12月6日或2008年12月6日之后售出了多少椅子。
下面是我期望每年的产出和椅子的销量。我正在考虑使用Dateadd函数,但还不确定如何编写它。非常感谢。
Year3 Year2 Year1 Date Year1 Year2 Year3
12/5/05 12/5/06 12/5/07 12/6/08 12/6/09 12/6/10 12/6/11
199 322 233 344 783 564发布于 2015-07-27 13:13:24
下面是来自tsql的概念证明,因为我不确定年度汇总,您是否需要汇总或切片总和。
declare @t table (item varchar(50), [date] date, Qty int)
insert into @t
values
('Chair', '20080612', 69),
('Chair', '20070612', 7),
('Chair', '20060612', 6),
('Chair', '20050612', 5),
('Chair', '20040612', 4),
('Chair', '20030612', 3),
('Chair', '20020612', 2),
('Chair', '20010612', 1),
('Chair', '20090612', 9),
('Chair', '20100612', 10),
('Chair', '20110612', 11),
('Chair', '20120612', 12)
select t.item
, sum(case when t1.[date] >= Dateadd(year, -3, t.[date]) and t1.[date] < t.[date] then t1.Qty else 0 end) as [-year3]
, sum(case when t1.[date] >= Dateadd(year, -2, t.[date]) and t1.[date] < t.[date] then t1.Qty else 0 end) as [-year2]
, sum(case when t1.[date] >= Dateadd(year, -1, t.[date]) and t1.[date] < t.[date] then t1.Qty else 0 end) as [-year1]
, t.date
, SUM(case when t1.[date] <= DATEADD(year, 1, t.[date]) and t1.[date] > t.[date] then t1.Qty else 0 end) as [+year1]
, SUM(case when t1.[date] <= DATEADD(year, 2, t.[date]) and t1.[date] > t.[date] then t1.Qty else 0 end) as [+year2]
, SUM(case when t1.[date] <= DATEADD(year, 3, t.[date]) and t1.[date] > t.[date] then t1.Qty else 0 end) as [+year3]
from @t t join @t t1 on t.item = t1.item
group by t.date, t.item
order by 1发布于 2015-07-27 12:30:46
您可以使用条件方法来获取所需的数据。将所需日期设置为轴心点
https://stackoverflow.com/questions/31643416
复制相似问题