使用更改参数多次运行sql

时间:2013-06-20 00:49:15

标签: sql sql-server tsql

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函数。

问题是我需要每周对这些记录进行分类并对每周记录进行分类,这意味着在2012-wk1之前有多少记录,其次是wk2,wk3等等。

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

我使用了一种更简单的方法,我根据自己的数据创建了一个函数,然后对需要数据的日期进行交叉应用,并对其进行过滤,无论行是否有效,现在给我的结果更好。

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