我正在尝试分析一些销售信息,但我无法使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
有人有想法可能有帮助吗? 如果您需要更多信息来了解我的情况,请告诉我。
答案 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