我正在重新提出我的问题。我有一张简单的表格:
Item Date QTY
Chair 12/6/08 69
我喜欢使用SQL Server从Item
列中提取这些项目,在Date
列之前提取三年,在Date
列之后或之后提取三年。
例如,Chair
项目,我想知道在12/6/08之前三年售出了多少把椅子;以及在2008年6月6日或2008年6月12日之后售出的椅子数量。
以下是我每年所需的产量和椅子销售情况。我正在考虑使用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
答案 0 :(得分:0)
下面只是证明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
答案 1 :(得分:-1)
您可以使用条件方法获取所需数据..将您想要的日期作为支点