SQL Server使用dateadd

时间:2015-07-27 00:30:15

标签: sql sql-server

我正在重新提出我的问题。我有一张简单的表格:

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

2 个答案:

答案 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)

您可以使用条件方法获取所需数据..将您想要的日期作为支点