正确的方法强制每月销售

时间:2017-10-22 15:59:08

标签: sql sybase sqlanywhere

我正在尝试分析一些销售信息,但我无法使SQL查询正常工作。由于我仍然学习如何正确使用SQL,我可能只是没有看到常规解决方案。

我想要一个包含数据库中所有文章的列表,并显示每个文章的每月销售额。没有销售的月份应列为零。

我已将文章信息存储在一个表格中,订单信息存储在另一个表格中,第三个表格中存储了实际销售的商品。

我现在的问题是,似乎有空的某种方式我创建了我的过滤器。 另外,如果我引用其他日期表,日期值“多重”而不是加入现有值/行(在reportMonth中每个月留下12行)。

这是我的代码:

<div class="news-collation-img">
    <?php if ( has_post_thumbnail() ) {
          the_post_thumbnail();
          } else { ?>
          <img src="<?php bloginfo('template_directory'); ?>/img/news/fallback-image.jpg" alt="<?php the_title(); ?>" />
    <?php } ?>
</div>

这是当前的输出

//* list of months */
WITH dates(reportMonth) as (
    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 union all select 10 union all 
    select 11 union all select 12
    )


SELECT article.articleno AS 'article_no'
    , month(beleg.orderdate)
    , dates.reportMonth

    , ISNULL(sum(orders_pos.amount), 0)
        AS 'VK_amount'

FROM article
    CROSS JOIN dates
    LEFT JOIN orders_pos ON article.articleno = orders_pos.articleno
    LEFT JOIN orders ON orders_pos.beleg_id = orders.id 
        AND ISNULL(month(orders.orderdate), 0) != 0 
        AND month(orders.orderdate) = dates.reportMonth

GROUP BY article.artikelnr
    , month(orders.orderdate)
    , dates.reportMonth

这就是我需要的

article_no  month(beleg.orderdate)  reportMonth VK_amount
Produkt_A                               1              5
Produkt_A                               2              9
Produkt_A                               3              7
Produkt_A                               4              5
Produkt_A                               5              5
Produkt_A                               6              7
Produkt_A                               7              5
Produkt_A                               8              7
Produkt_A                               9              7
Produkt_A                               10             6
Produkt_A                               11             7
Produkt_A                               12             7
Produkt_A     1                         1              1
Produkt_A     4                         4              1
Produkt_A     5                         5              2
Produkt_A     7                         7              3
Produkt_A     8                         8              2

有人有想法可能有帮助吗? 如果您需要更多信息来了解我的情况,请告诉我。

1 个答案:

答案 0 :(得分:0)

您的查询不起作用,因为GROUP BY中的汇总列与SELECT中的列不匹配。也许正确的查询会有所帮助:

SELECT a.articleno AS article_no, month(o.orderdate), d.reportMonth,
       COALESCE(sum(op.amount), 0) as VK_amount
FROM article a CROSS JOIN 
     dates d LEFT JOIN
     orders_pos op
     ON a.articleno = op.articleno LEFT JOIN
     orders o
     ON op.beleg_id = o.id AND
        month(o.orderdate) = d.reportMonth  -- is there a condition on year?
GROUP BY a.artikelnr, month(o.orderdate), d.reportMonth
ORDER BY a.artikelnr, month(o.orderdate), d.reportMonth