我需要运行一个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。我知道我可以在表示层上使用循环来完成此操作,但在这种特殊情况下,并不是这样的。
答案 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