2013-06-20 43 views
5

Hy vọng TẤT CẢ là tốt. Tôi có câu hỏi về máy chủ SQL nhanh:cách nhóm theo tuần (7 ngày) trong sql sever

Tôi muốn hiển thị cột tuần trong khoảng tăng 7 ngày. Dưới đây là ví dụ đầu ra mong muốn của tôi. Có cách nào để viết trong 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 

Xin cảm ơn! Joe

Đây là tập lệnh được chấp nhận của tôi.

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

Tất cả là tốt. Cảm ơn – Kermit

Trả lời

9

DATEDIFF (WK, 0,) cần thực hiện thủ thuật.

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) 

EDIT:

Với ngày định dạng nó đi như thế này:

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, tôi đã sửa đổi tập lệnh của mình bằng khái niệm CỦA BẠN và nó đã LÀM VIỆC. Tuy nhiên, tôi muốn hiển thị kết quả bắt đầu từ 10/1/12 đến 10/7/12, 10/8/12 đến 10/14/12, và 10/15/12 đến 10/21/12 ... Tôi nghĩ một điều kiện là cần thiết, phải không? – joe

+0

@joe: Trong phiên bản đã chỉnh sửa, hãy thử thay thế 'DATEDIFF (WK, 0, MyDate)' trong truy vấn phụ (cả hai mục nhập) bằng 'DATEDIFF (DAY, @YourStartDate, MyDate)/7' và' DATEADD (WK, WK, 0) 'trong truy vấn chính (cả hai mục nhập) với' DATEADD (WK, WK, @YourStartDate) '. –

+0

@ Andriy M, Cảm ơn bạn đã thay đổi. Nó hoạt động hoàn hảo. Kết quả hiển thị ngày đầu tiên và tháng tiếp theo. Ví dụ chạy tập lệnh này hiển thị 01/10 thay vì 10/1. Tôi đoán tôi đã xem bộ phim Air Force One quá nhiều lần. Tôi báo 'Khi bạn cho anh ta sữa, anh ta muốn cookie tiếp theo'. Tôi hy vọng tôi khác biệt. Cảm ơn một lần nữa. – joe

Các vấn đề liên quan