web-dev-qa-db-ja.com

日付によるグループ化の日付範囲のすべての日付を表示するにはどうすればよいですか?

「製品」というテーブルがあるとします。

Productive product-name   product-quantity  created-date
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

このクエリを実行すると:

Select convert(date,createddate,101), count(product-quantity) from products
Where created-date > 1/9/2018 and created-date < 1/16/1018
group by convert(date,createddate,101)

これは私に次のような出力を与えます

created-date.  product-quantity
1/10/2018            30
1/11/2018            80
1/15/2018            40

達成したい:

created-date.  product-quantity
1/10/2018            30
1/11/2018            80
1/12/2018            00
1/13/2018            00
1/14/2018            00
1/15/2018            40

どうすればできますか?

1
Agnel Amodia

Calendarテーブルの基本的な実装。

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

DECLARE @date date = '20180101';
WHILE @date <= '20180131'
BEGIN
    INSERT INTO Calendar VALUES (@date, DAY(@date), DATEPART(weekday, @date), DATENAME(weekday, @date));
    SET @date = DATEADD(day, 1, @date);
END
GO
 31行が影響を受けました
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行が影響を受けました

LEFT JOINを使用して、カレンダーテーブルからすべてのレコードを取得し、productsテーブルで一致するレコードのみを取得していることに注意してください。

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 >= (SELECT MIN(Created) FROM products)
AND        c.cDate <= (SELECT MAX(Created) FROM products);
GO
作成|数量
:--------------- -:
 2018年10月1日00:00:00 | 2 
 2018年11月1日00:00:00 | 2 
 2018年12月1日00:00:00 | 0 
 2018年1月13日00:00:00 | 0 
 2018年1月14日00:00:00 | 0 
 15/01/2018 00:00:00 | 1 

dbfiddle ---(ここ

0
McNets