[英]SQL Show Null Value Group By
這是我數據庫中的表
+--+-------+---------+----------+--------+
|ID|OrderID|ProductID|OrderDate |Quantity|
| 1|1 |1 |2017-01-01|1 |
| 2|1 |1 |2017-01-01|6 |
| 3|1 |1 |2017-01-03|9 |
| 4|1 |1 |2017-01-04|3 |
| 5|1 |1 |2017-01-05|5 |
| 6|1 |1 |2017-01-07|1 |
| 7|1 |1 |2017-01-09|2 |
+--+-------+---------+----------+--------+
我想顯示這樣的數據
+----------+----+
|2017-01-01|7 |
|2017-01-02|0 |
|2017-01-03|9 |
|2017-01-04|3 |
|2017-01-05|5 |
|2017-01-06|0 |
|2017-01-07|1 |
|2017-01-08|0 |
|2017-01-09|2 |
+----------+----+
我應該使用什么查詢來實現它,我嘗試使用OrderDate組,但是當它為null時它不會顯示
在這個答案中給出了在給定日期范圍之間生成日期的一種方法。
您可以動態生成行或更好地生成行,創建日歷表並將其用於此類目的。
以下是基於上述鏈接解決方案的解決方案:
select d.day, sum(t.quantity) as quantity
from (
select min_orderdate + INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
from (
select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9
) as a
cross join (
select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9
) as b
cross join (
select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9
) as c
join (
select min(orderdate) min_orderdate, max(orderdate) max_orderdate from your_table
) t on min_orderdate + INTERVAL (a.a + (10 * b.a) + (100 * c.a)) <= max_orderdate
) d
left join your_table t on d.day = t.orderdate
group by d.day;
這是一個相同的演示 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.