2011-09-20 95 views
3

数我所说的表日历和数据的模样:计算周

Date       Week_Num  Month_Year 
1996-01-27 00:00:00.000  1021   01/1997 
1996-01-28 00:00:00.000  1021   01/1997 
1996-01-29 00:00:00.000  1021   01/1997 
1996-02-03 00:00:00.000  1022   01/1997 
1996-02-04 00:00:00.000  1022   01/1997 
1996-02-10 00:00:00.000  1023   01/1997 
1996-02-11 00:00:00.000  1023   01/1997 

我要计算在MONTH_YEAR周数:

我写了类似的查询:

Select Month_year,Count(*) 
From (Select Week_Num,Month_year 
     From Calendar 
     Group By Week_Num,Month_year 
    )a 
Group By Month_year 
order by Month_year 

这是给我我想要什么,但有没有更好的方法呢?

回答

4
SELECT Month_Year, COUNT(DISTINCT Week_Num) 
FROM Calendar 
GROUP BY Month_Year 

这可以删除一个级别的聚合并且更具可读性。不过,我不确定它是否会有更好的表现。

样品概念证明:

DECLARE @t table (DT smalldatetime, week_num int, month_year varchar(100)) 

INSERT INTO @t 
VALUES 
('1996-01-27 00:00:00.000', 1021,'01/1997'), 
('1996-01-28 00:00:00.000', 1021,'01/1997'), 
('1996-01-29 00:00:00.000', 1021,'01/1997'), 
('1996-02-03 00:00:00.000', 1022,'01/1997'), 
('1996-02-04 00:00:00.000', 1022,'01/1997'), 
('1996-02-10 00:00:00.000', 1023,'01/1997'), 
('1996-02-11 00:00:00.000', 1023,'01/1997') 

SELECT Month_Year, COUNT(DISTINCT Week_Num) 
FROM @t 
GROUP BY Month_Year 

返回:

Month_Year (No column name) 
01/1997   3 
+0

您可以通过32秒打我,哎呀! :) –

+0

@JNK不,这是不是我想要的例如在上面的数据otput应该返回我3自Month_year 01/1997有三个星期了。 – Peter

+2

@彼得 - 它是什么回报呢? – JNK

1

我,这是你所需要的:

Select Month_year,Count(distinct Week_Num) 
From Calendar 
Group By Month_year 
order by Month_year 
+0

nope这不是我想要的例如在上面的数据otput应该返回我3自Month_year 01/1997有三个星期。 – Peter

+1

@Peter你试过运行过吗?我确实返回3于01/1997! –

+1

+1 - 绝对基于我们给出的样本数据工作 – JNK