2014-10-16 3 views
0

Мне нужно показать все номера недель в месяц, независимо от того, есть ли часы на эту неделю или нет.Всегда показывать пустые недели

Изменить это:

2.00 2 July 
2.25 3 July 
7.25 5 July 

Для этого:

0.00 1 July 
2.00 2 July 
2.25 3 July 
0.00 4 July 
7.25 5 July 

Вот текущий запрос я работаю с:

SELECT SUM(te.Hours_Bill) AS HoursBilled 
    , DATEPART(dd, DATEDIFF(dd, 0, te.Date_Start)/7 * 7)/7 + 1 AS HoursWeekNumber 
    , DATENAME(mm, te.Date_Start) AS HoursMonthName 

FROM AGR_Header ah 
     INNER 
     JOIN Time_Entry te 
      ON te.Agr_Header_RecID = ah.AGR_Header_RecID 
     INNER 
     JOIN Company co 
      ON co.Company_RecID = ah.Company_RecID 

WHERE (te.Date_Start >= DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) -6, 0) AND te.Date_Start <= DATEADD(mm, DATEDIFF(mm, -1, GETDATE()) -1, -1)) 

GROUP 
    BY DATEPART(dd, DATEDIFF(dd, 0, te.Date_Start)/7 * 7)/7 + 1 
    , DATENAME(mm, te.Date_Start) 
    , DATEPART(mm, te.Date_Start) 

ORDER 
    BY DATEPART(mm, te.Date_Start) ASC 
    , DATEPART(dd, DATEDIFF(dd, 0, te.Date_Start)/7 * 7)/7 + 1 ASC 

По умолчанию я хочу, чтобы показать все номера недель в течение месяца и если результатов за неделю нет, отобразите 0.

+0

Используйте внешнее соединение на столе (или КТР) «чисел неделю в месяц». –

ответ

0

Это может помочь вам

CREATE TABLE #t 
    (
    hr  NUMERIC(22, 6), 
    weekno INT, 
    mon VARCHAR(20) 
) 

INSERT INTO #t 
VALUES 
(2.00 , 2 , 'October'), 
(2.25 , 3 , 'October'), 
(7.25 , 5 , 'October') 

WITH dates AS (
    SELECT 1 id,datename(month,(getdate())) mon 
    UNION ALL 
     SELECT id+1, mon FROM dates WHERE id<5 
) 
SELECT Isnull(hr, 0) hrs, 
     id AS weekno, 
     d.mon AS [month] 
FROM #t t 
     RIGHT JOIN dates d 
       ON t.mon = d.mon 
        AND t.weekno = d.id 

выход

hrs  weekno month 
0.000000 1  October 
2.000000 2  October 
2.250000 3  October 
0.000000 4  October 
7.250000 5  October 
Смежные вопросы