SQL - 当单位id为null / 0时,具有完整的日期范围

时间:2016-09-12 21:59:55

标签: sql-server

我正在构建一个查询来计算产品a和产品b的单位数以及一系列日期的总价值金额。几乎所有日子都有一个或多个产品A单位,但产品B在某些天内可以有0个单位。我已将产品B表与日期列上的产品A表联系起来。我还使用了WITH子句来计算产品B单位的数量。单位的聚合是正确的,但是,我想知道如何“添加”下面范围内的日期,例如查询未检索到的日期,所以没有产品B单位的日子 - 如08/08 / 16,10 / 08/16如下表所示(下表是检索到的查询行)。

date        unit_a   unit_b  amount
07/08/16    24         1     48
09/08/16    62         17   207
11/08/16    52         12   102
12/08/16    31         5    152
16/08/16    32         12   110
17/08/16    30         3    120
18/08/16    43         41   315
19/08/16    20         1    50.12
21/08/16    19         12   48
22/08/16    35         1    32

以下是我要创建的查询示例:

with prod_a as(
    select cast(a.date_started as date) as a_date,
    count(a.id) as id_a
    from table_a a
    group by cast(a.date_started as date) ,a.id_a

)
SELECT cast(b.date_started as date) as b_date, 
    count(case when b.id is not null then id_b else null end) as units_b,
    case when cond1=something then ISNULL(sum(table_b.price),0) else null end as amount, 
FROM table_b b
LEFT JOIN prod_a
    ON prod_a.a_date = b.b_date 
where cast(b.b_date as date) >= dateadd(day,-21,getdate())
GROUP BY cast(b.b_date as date)

如果您有任何建议可以告诉我。 一种解决方案是创建一个范围内日期的虚表(带有WITH子句),但我试图不采用该路由或将CASE添加到主select语句,以便在没有b时插入0而不是Null。标识。

0 个答案:

没有答案