2013-06-20 50 views
5

希望一切都很好。我有快速的SQL服務器問題:如何在sql服務器中按星期(7天)分組

我想顯示7天增量的星期列。以下是我期望的輸出示例。有沒有辦法在SQL Server中寫入?

Week   Football soccer baseball 
10/01 - 10/07  1  2  3 
10/08 - 10/14  4  5  6 
10/15 - 10/21  5  8  0 

再次感謝! Joe

這是我的腳本。

CREATE TABLE #TEMP 
(
DT CHAR(10), 
TO_DT CHAR(10), 
BALLs VARCHAR(100), 
PRODUCT INT, 
Week INT 
) 

DECLARE 
@DT DATETIME, 
@TO_DT DATETIME, 
@i INT 

BEGIN 
SET @_DT  = '10/01/2012' 
SET @TO_DT = DATEADD(DAY,7,@_DT) 
set @i=1 


WHILE (@DT <= '12/31/2013') 


BEGIN 
INSERT INTO #TEMP (DT, TO_DT, BALLs, PRODUCT, week) 

SELECT 
CONVERT(CHAR(10),@DT,101)     AS FROM_DT, 
CONVERT(CHAR(10),DATEADD(DAY,-1,@TO_DT),101) AS TO_DT, 
BALLS, 
COUNT(PRODUCT)     AS PRODUCT, 
@I            AS WEEK 
FROM #TABLE 
GROUP BY BALLS 

SET @DT = DATEADD(DAY,7,@DT) 
SET @TO_DT = DATEADD(DAY, 7,@TO_DT) 
set @i = @i + 1 
END 


SELECT * FROM #TEMP 

DROP TABLE #TEMP 

END 
+1

一切都很好。謝謝 – Kermit

回答

9

DATEDIFF(WK,0,)應該這樣做。

SELECT 
    DATEDIFF(WK, 0, MyDate) 
    , COUNT(*) 
FROM (VALUES 
('2013-01-01') 
, ('2013-01-02') 
, ('2013-01-03') 
, ('2013-01-04') 
, ('2013-01-05') 
, ('2013-01-06') 
, ('2013-01-07') 
) AS X(MyDate) 
GROUP BY DATEDIFF(WK, 0, MyDate) 

編輯:

隨着日期格式化是這樣的:

SELECT 
    CONVERT(VARCHAR(5), DATEADD(WK, WK, 0), 103) + ' - ' + CONVERT(VARCHAR(5), DATEADD(DD, 6, DATEADD(WK, WK, 0)), 103) 
    , Cnt 
FROM (
    SELECT 
     DATEDIFF(WK, 0, MyDate) AS WK 
     , COUNT(*) AS Cnt 
    FROM (VALUES 
    ('2013-01-01') 
    , ('2013-01-02') 
    , ('2013-01-03') 
    , ('2013-01-04') 
    , ('2013-01-05') 
    , ('2013-01-06') 
    , ('2013-01-07') 
    ) AS X(MyDate) 
    GROUP BY DATEDIFF(WK, 0, MyDate) 
) AS X  
+0

@ Serge,我使用你的概念修改了我的腳本,它工作。但是,我想從2012年10月1日至2012年10月7日,2012年10月8日至12月14日以及2012年10月15日至10月21日...我認爲需要一段時間的條件,是嗎? – joe

+0

@joe:在編輯的版本中,嘗試用DATEDIFF(DAY,@YourStartDate,MyDate)/ 7'和'DATEADD(WK,WK等)替換子查詢中的'DATEDIFF(WK,0,MyDate) 0)'在主查詢(兩個條目)中用'DATEADD(WK,WK,@YourStartDate)'。 –

+0

@ Andriy M,謝謝你的轉變。它工作得很完美。結果顯示第一天和第二天。運行此腳本的示例顯示01/10而不是10/1。我想我已經看過空軍一號電影太多次了。我引用'當你給他牛奶,他希望接下來的餅乾'。我希望我有所不同。再次感謝。 – joe