首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

急求!该怎么解决

2013-01-17 
急求!!!!sqlserver数据库中怎样获取2012-10-10到2012-11-30的所有周,(并且显示是一年中的第几周)?急用!!!

急求!!!!
sqlserver数据库中怎样获取2012-10-10到2012-11-30的所有周,(并且显示是一年中的第几周)?急用!!!谢谢大家。
[解决办法]


select 
DATEADD(dd,number,'2012-10-10') dt,
datepart(WK,DATEADD(dd,number,'2012-10-10'))  as wk
from
master..spt_values
where
number between 0 and DATEDIFF(dd,'2012-10-10','2012-11-30')
and type='p'
/*
dt                      wk
----------------------- -----------
2012-10-10 00:00:00.000 41
2012-10-11 00:00:00.000 41
2012-10-12 00:00:00.000 41
2012-10-13 00:00:00.000 41
2012-10-14 00:00:00.000 42
2012-10-15 00:00:00.000 42
2012-10-16 00:00:00.000 42
2012-10-17 00:00:00.000 42
2012-10-18 00:00:00.000 42
2012-10-19 00:00:00.000 42
2012-10-20 00:00:00.000 42
2012-10-21 00:00:00.000 43
2012-10-22 00:00:00.000 43
2012-10-23 00:00:00.000 43
2012-10-24 00:00:00.000 43
2012-10-25 00:00:00.000 43
2012-10-26 00:00:00.000 43
2012-10-27 00:00:00.000 43
2012-10-28 00:00:00.000 44
2012-10-29 00:00:00.000 44
2012-10-30 00:00:00.000 44
2012-10-31 00:00:00.000 44
2012-11-01 00:00:00.000 44
2012-11-02 00:00:00.000 44
2012-11-03 00:00:00.000 44
2012-11-04 00:00:00.000 45
2012-11-05 00:00:00.000 45
2012-11-06 00:00:00.000 45
2012-11-07 00:00:00.000 45
2012-11-08 00:00:00.000 45
2012-11-09 00:00:00.000 45
2012-11-10 00:00:00.000 45
2012-11-11 00:00:00.000 46
2012-11-12 00:00:00.000 46
2012-11-13 00:00:00.000 46
2012-11-14 00:00:00.000 46
2012-11-15 00:00:00.000 46
2012-11-16 00:00:00.000 46
2012-11-17 00:00:00.000 46
2012-11-18 00:00:00.000 47
2012-11-19 00:00:00.000 47
2012-11-20 00:00:00.000 47
2012-11-21 00:00:00.000 47
2012-11-22 00:00:00.000 47
2012-11-23 00:00:00.000 47
2012-11-24 00:00:00.000 47
2012-11-25 00:00:00.000 48
2012-11-26 00:00:00.000 48
2012-11-27 00:00:00.000 48
2012-11-28 00:00:00.000 48
2012-11-29 00:00:00.000 48
2012-11-30 00:00:00.000 48

(52 行受影响)


*/

[解决办法]
添加篩選:週期範圍

USE test
GO


---->生成表tb
--if object_id('tb') is not null 
--drop table tb
--Go
---- test data
--Create table tb([日期] datetime,[OrderNr] nvarchar(3),[CustomerName] nvarchar(1))
--Insert into tb
--Select '2012-01-01',N'#1',N'A'
--Union all Select '2012-01-02',N'#2',N'A'
--Union all Select '2012-01-03',N'#3',N'A'
--Union all Select '2012-01-04',N'#4',N'A'
--Union all Select '2012-02-01',N'#5',N'A'
--Union all Select '2012-02-02',N'#6',N'B'
--Union all Select '2012-02-03',N'#7',N'B'
--Union all Select '2012-05-14',N'#8',N'B'
--Union all Select '2012-05-16',N'#9',N'C'
--Union all Select '2012-05-18',N'#10',N'B'


--Union all Select '2012-05-19',N'#11',N'C'
--Union all Select '2012-09-05',N'#12',N'A'
--Union all Select '2012-09-06',N'#13',N'D'
--Union all Select '2012-09-07',N'#14',N'D'
--Union all Select '2013-01-06',N'#14',N'D'
--Union all Select '2013-01-07',N'#14',N'D'


;WITH Result AS (
SELECT YEAR(日期) AS [Year],DATEPART(Week,日期) AS [Week],* FROM tb
)
SELECT 
COUNT(a.日期) AS [Count]
,b.[Week]
,b.[Year]
FROM Result AS a
RIGHT JOIN (                                                                                                                                
SELECT
t.Year,t2.Week 
FROM (
SELECT DISTINCT 
Year 
FROM Result
) t,(
SELECT TOP 52 
ROW_NUMBER()OVER(ORDER BY getdate()) AS [Week] 
FROM sys.syscolumns
) t2
WHERE t2.Week>=(SELECT MIN(Week) FROM Result AS x WHERE x.Year=t.Year)
AND t2.Week<=(SELECT MAX(Week) FROM Result AS x WHERE x.Year=t.Year)
) AS b ON a.Year=b.Year AND a.Week=b.Week
GROUP BY b.[Week],b.[Year]
ORDER BY b.[Year],b.[Week]


/*
Count  Week  Year
------ ----- -----
4      1     2012
0      2     2012
0      3     2012
0      4     2012
3      5     2012
0      6     2012
0      7     2012
0      8     2012
0      9     2012
0      10    2012
0      11    2012
0      12    2012
0      13    2012
0      14    2012
0      15    2012
0      16    2012
0      17    2012
0      18    2012
0      19    2012
4      20    2012
0      21    2012
0      22    2012


0      23    2012
0      24    2012
0      25    2012
0      26    2012
0      27    2012
0      28    2012
0      29    2012
0      30    2012
0      31    2012
0      32    2012
0      33    2012
0      34    2012
0      35    2012
3      36    2012
2      2     2013
*/

热点排行