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

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

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

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

4

2 回答 2

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;
于 2013-06-20T00:57:12.423 回答
0

我使用了一种更简单的方法,我根据我的数据创建了一个函数,并与我需要数据的日期进行了交叉应用,并过滤了该行是否有效,这现在给了我更好的结果。

Select * FROM (
Select *, CASE WHEN weekNo(Tableweeks) < week(TableX) THEN 1 ELSE 0 END 'Valid'
from tableX CROSS APPLY Tableweeks )
WHERE Valid = 1
于 2013-06-26T05:49:18.277 回答