SQL - 每周列数(从声明的开始日期开始的X周)

时间:2014-06-24 11:03:26

标签: sql sql-server

我需要运行一个select语句,该语句会返回一些发票,其中的值会显示在与发票出现的那周相对应的列中。示例:

id value  invoiced
1  150    2014-01-06
2  220    2014-01-13
3  190    2014-01-13
4  880    2014-01-27
5  325    2014-02-03

我需要这些数据以类似于下面的格式显示:

ID  W/E 2014-01-05  W/E 2014-01-12  W/E 2014-01-19  W/E 2014-01-26  W/E 2014-02-02  W/E 2014-02-09  W/E 2014-02-16
1   0               150             0               0               0               0               0
2   0               0               220             0               0               0               0
3   0               0               190             0               0               0               0
4   0               0               0               0               880             0               0
5   0               0               0               0               0               325             0   

第一个日期取自变量,其余周数从该点开始计算(X周)。我最初的想法是使用一个临时表来保存每个日期范围的行,然后加入该表来执行一个数据库......但说实话,这对我来说都是新手,所以我完全不知道语法

不需要任何分组(没有要处理的金额),我只需要确保适当的值最终在适当的列中。

P.S。我知道我可以在表示层上使用循环来完成此操作,但在这种特殊情况下,并不是这样的。

1 个答案:

答案 0 :(得分:0)

declare @t table (Id INT,Value INT,invoiced Date )
insert into  @t (Id,Value,invoiced)values (1,150,'2014-01-06')
insert into  @t (Id,Value,invoiced)values (2,220,'2014-01-13')
insert into  @t (Id,Value,invoiced)values (3,190,'2014-01-15')
insert into  @t (Id,Value,invoiced)values (4,880,'2014-01-27')
insert into  @t (Id,Value,invoiced)values (5,325,'2014-01-29')
Select id,
    [w/e2014-01-06],
    [w/e2014-01-13],
    [w/e2014-01-15],
    [w/e2014-01-27],
    [w/e2014-01-29]
         from
(Select distinct t.ID,t.Value,
    'w/e' + CAST(t.invoiced AS VARCHAR)AS Dateno 
        from @t t)t
PIVOT (MAX(value)FOR Dateno IN([w/e2014-01-06],[w/e2014-01-13],[w/e2014-01-15],[w/e2014-01-27],[w/e2014-01-29]))p