列出查询中的州销售,即使该月没有销售

时间:2019-02-03 14:06:54

标签: sql sql-server select

在编写SQL Server查询时,我需要您的专家帮助。我每个月必须为报告生成两个表,该表总结每个州的销售数量和总和。为了简单起见,假设sales表只有4列:订单号,日期,状态和总计。表一列出了每个州曾经进行的所有销售以及总销售额。第二张图表仅列出了各州该月的销售额。

enter image description here enter image description here

我可以很容易地编写第一个查询。我的问题是第二个查询。第二个表必须包含任何状态,即使本月没有任何销售(这将有0个订单和0个总销售额),我们之前在其中的销售情况也是如此。这两个表在报告中并排放置,如果其中一个缺少月度销售表的状态,这将很明显。该报告将自动执行,这意味着我不能简单地添加缺失的值。在实际的生产环境中,我们目前有来自29个州的订单。下个月,我们可能会收到一个处于新(或几个新)状态的订单,这意味着我无法在like语句中对状态名称进行硬编码。同样,我无法在第一个表中显示从未销售过的状态(管理规则)。有人可以协助我将这个查询放在一起吗?我似乎无法完全理解语法。感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

为什么要编写两个查询?只需写五列即可:

select state,
       count(*) as orders_total,
       sum(total) as sales_total,
       sum(case when date >= '2019-01-01' and date < '2019-02-01'
                then 1 else 0
           end) as orders_201901,
       sum(case when date >= '2019-01-01' and date < '2019-02-01'
                then total else 0
           end) as sales_201901
from t
group by state
order by state;