2013-06-20 25 views
-1
Table1: 
id | value | date 
1 1  1/01/2012 
1 2  2/02/2012 
2 1  3/01/2012 
2 4  4/01/2012 
3 2  5/01/2012 
4 1  5/04/2012 

假设表我有大约100万条记录,我想创建一个PIVOT表,但是因为我有SQL Server 2000不能使用PIVOT函数。运行sql多次改变参数

的问题是是,我需要这些记录,每周进行分类和分类,每周意记录的记录数分别为前2012-WK1其次是WK2,WK3等在那里让。

我已经写了使用rank函数给出输出的sql,但是我需要每次运行查询时都要传递一个日期。所以我把查询放在每周自动增加的while循环中。

主要问题:目前,当我运行查询时,它会在每次迭代时返回1个结果。我想实现的是能够将所有这些结果放入视图中,但是,我不想创建表并插入记录,然后将其显示为视图。

+0

你可以发布你的SQL查询,所以我们可以看看你已经尝试过吗? – JanR

+0

@harshadbhatia:添加一些示例输出。您可以使用http://sqlfiddle.com/#!3。 –

回答

0

我用在我创建了一个基于我的数据的功能更简单的方法,并没有交叉的日期,我需要的数据应用和过滤它的行是否有效或者不现在,这给了我更好的结果。

Select * FROM (
Select *, CASE WHEN weekNo(Tableweeks) < week(TableX) THEN 1 ELSE 0 END 'Valid' 
from tableX CROSS APPLY Tableweeks) 
WHERE Valid = 1 
0

您想在一年内每周计算一次结果吗?如果是这样,像这样将工作:

select dateadd(day, 7*n.week, '2013-01-01'), count(*), sum(value) 
from Table1 t1 join 
    (select 0 as week union all select 1 as week union all select 2 as week 
    ) n 
    on datediff(day, '2013-01-01', [date]) between 7*n.week and 7*n.week + 6 
group by n.week;