簡體   English   中英

SQL顯示空值組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM