Here is another approach if you want to report all items on all days even if there are no views nor clicks.DECLARE @ItemList TABLE ( ID INT, Name VARCHAR(20) )INSERT @ItemListSELECT 1, 'Item1' UNION ALLSELECT 2, 'Item2' UNION ALLSELECT 3, 'Item3' UNION ALLSELECT 4, 'Item4'DECLARE @Stats TABLE ( ID INT, ItemListID INT, EntryDateTime DATETIME, Type TINYINT )SET DATEFORMAT YMDINSERT @StatsSELECT 1, 1, '2008-09-22 04:47:33', 0 UNION ALLSELECT 2, 2, '2008-09-22 06:27:13', 0 UNION ALLSELECT 3, 1, '2008-09-22 07:14:22', 1 UNION ALLSELECT 4, 3, '2008-09-23 01:41:55', 0 UNION ALLSELECT 5, 2, '2008-09-23 13:47:33', 1-- PesoSELECT d.theDate, l.ID, l.Name, SUM(CASE WHEN s.Type = 0 THEN 1 ELSE 0 END) AS Viewed, SUM(CASE WHEN s.Type = 1 THEN 1 ELSE 0 END) AS ClickedFROM ( SELECT DATEADD(DAY, DATEDIFF(DAY, '19000101', EntryDateTime), '19000101') AS theDate FROM @Stats GROUP BY DATEADD(DAY, DATEDIFF(DAY, '19000101', EntryDateTime), '19000101') ) AS dCROSS JOIN @ItemList AS lLEFT JOIN ( SELECT ItemListID, DATEADD(DAY, DATEDIFF(DAY, '19000101', EntryDateTime), '19000101') AS EntryDateTime, Type FROM @Stats ) AS s ON s.ItemListID = l.ID AND s.EntryDateTime = d.theDateGROUP BY d.theDate, l.ID, l.Name ORDER BY d.theDate, l.ID, l.Name
E 12°55'05.63"N 56°04'39.26"