首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -每月销售数据汇总

SQL -每月销售数据汇总
EN

Stack Overflow用户
提问于 2017-11-30 00:30:30
回答 1查看 160关注 0票数 0

我有两个需要组合的表,但我不能让它们看起来像要工作的联接。这幅画有三张桌子

_date_array2:有一个字段DateMonthYr,其中包含所有可能的日期/年组合

_sales_summ_tbl__ =>有5个字段。只有几个月的销售出现。例如,您只看到第二个表显示了三个记录。例如,没有2016年5月,因为那个月没有销售。

我的目标是“垫”第二个表,使TotalDemand在几个月内没有销售。我非常接近(见第三表),但我无法让PartNumber在没有销售的情况下出现。

我猜是因为正确的加入。但我不知道该怎么处理。,我希望的输出是表3,但所有条目都填充了部件号。

下面是我的代码(运行此代码的结果是图片中的第三个/最后一个表):

代码语言:javascript
复制
SELECT TmpSalesTbl.PartNumber as PartNumber,
tmp_date_array.CreateDateMonth as CreateDateMonth,
tmp_date_array.CreateDateYear as CreateDateYear,
CASE WHEN TmpSalesTbl.TotalDemand is NULL THEN 0 ELSE TmpSalesTbl.TotalDemand END as TotalDemand
FROM #_sales_summ_tbl__ TmpSalesTbl
RIGHT JOIN #_date_array2 tmp_date_array on tmp_date_array.CreateDateMonthYr = TmpSalesTbl.CreateDateMonthYr
ORDER BY tmp_date_array.CreateDateYear, tmp_date_array.CreateDateMonth
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-30 01:28:28

更传统的做法是将所有日期的列表放在第一位,然后离开对数据的联接,同时使用case表达式很好,另一种方法是coalesce()。这应确保显示所有通缉的月份/年份:

代码语言:javascript
复制
SELECT
      tmpsalestbl.PartNumber               AS partnumber
    , tmp_date_array.CreateDateMonth       AS createdatemonth
    , tmp_date_array.CreateDateYear        AS createdateyear
    , COALESCE(tmpsalestbl.TotalDemand, 0) AS totaldemand
FROM #_date_array2 tmp_date_array
LEFT JOIN #_sales_summ_tbl__ tmpsalestbl ON tmp_date_array.CreateDateMonthYr = tmpsalestbl.CreateDateMonthYr
ORDER BY
      tmp_date_array.CreateDateYear
    , tmp_date_array.CreateDateMonth

要在每个月中填充每个partnumber,您需要一个新的子查询:

代码语言:javascript
复制
select distinct PartNumber #_sales_summ_tbl__

然后用cross join表示年份/月,这样你就有了一套完整的年份/月/部分。

代码语言:javascript
复制
SELECT
      cj.PartNumber                        AS partnumber
    , tmp_date_array.CreateDateMonth       AS createdatemonth
    , tmp_date_array.CreateDateYear        AS createdateyear
    , COALESCE(tmpsalestbl.TotalDemand, 0) AS totaldemand
FROM #_date_array2 tmp_date_array
CROSS JOIN (
      SELECT DISTINCT
            PartNumber FROM #_sales_summ_tbl__
      ) cj
LEFT JOIN #_sales_summ_tbl__ tmpsalestbl ON tmp_date_array.CreateDateMonthYr = tmpsalestbl.CreateDateMonthYr
                                        AND cj.PartNumber = tmpsalestbl.PartNumber
ORDER BY
      tmp_date_array.CreateDateYear
    , tmp_date_array.CreateDateMonth
;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47564078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档