我正在构建一个查询来计算产品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。标识。