How to display all the dates in the date-range having group by dates?
A basic implementation of a Calendar table.




CREATE TABLE Calendar(cDate datetime, cDay int, cDayOfWeek int, cDayName varchar(20));

DECLARE @date date = '20180101';
WHILE @date &lt;= '20180131'
BEGIN
    INSERT INTO Calendar VALUES (@date, DAY(@date), DATEPART(weekday, @date), DATENAME(weekday, @date));
    SET @date = DATEADD(day, 1, @date);
END
GO



31 rows affected






CREATE TABLE products(Productive int, Name char(3), Qty int, Created date);
INSERT INTO products VALUES
(111, 'ABC', 10, '1/10/2018'),
(222, 'XYZ', 20, '1/10/2018'),
(333, 'PQR', 30, '1/11/2018'),
(444, 'MNC', 40, '1/15/2018'),
(555, 'DEF', 50, '1/11/2018');
GO



5 rows affected



Notice I've used a LEFT JOIN to get all records from calendar table and only those records that match on products table.




SELECT     c.cDate AS Created, COALESCE(Qty, 0) AS Qty
FROM       Calendar c
LEFT JOIN  (SELECT   CONVERT(date, Created, 101) AS [Created],
                     COUNT(Qty) AS [Qty]
            FROM     products
            GROUP BY CONVERT(date, Created, 101)) p
ON         p.Created = c.cDate
WHERE      c.cDate &gt;= (SELECT MIN(Created) FROM products)
AND        c.cDate &lt;= (SELECT MAX(Created) FROM products);
GO



Created             | Qty
:------------------ | --:
10/01/2018 00:00:00 |   2
11/01/2018 00:00:00 |   2
12/01/2018 00:00:00 |   0
13/01/2018 00:00:00 |   0
14/01/2018 00:00:00 |   0
15/01/2018 00:00:00 |   1



dbfiddle here