如何在mysql中生成季度报告并按季度汇总

如何在mysql中生成季度报告并按季度汇总,mysql,sql,Mysql,Sql,我想在mysql数据库中生成一份季度报告,并按季度进行汇总。我写了下面的查询,但它不起作用 SELECT t.name as terminals, sum(bl.barrels_net_qty) as 'IST QTR', sum(bl2.barrels_net_qty) as '2ND QTR', sum(bl3.barrels_net_qty) as '3RD QTR', sum(bl4.barrels_net_qty) as '4TH QTR',

我想在mysql数据库中生成一份季度报告,并按季度进行汇总。我写了下面的查询,但它不起作用

SELECT t.name as terminals, 
    sum(bl.barrels_net_qty) as 'IST QTR', 
    sum(bl2.barrels_net_qty) as '2ND QTR', 
    sum(bl3.barrels_net_qty) as '3RD QTR', 
    sum(bl4.barrels_net_qty) as '4TH QTR', 
    sum(coalesce(bl.barrels_net_qty,0)) 
+ sum(coalesce(bl2.barrels_net_qty,0)) 
+ sum(coalesce(bl3.barrels_net_qty,0))
+ sum(coalesce(bl4.barrels_net_qty,0)) as total 
FROM loadingdetails  as l
LEFT JOIN bldetails as bl on bl.operation_no = l.operation_no AND l.year = '2020' AND bl.month = 'January' and bl.month = 'Feburary' and bl.month = 'March'
LEFT JOIN bldetails as bl2 on bl2.operation_no = l.operation_no  and l.year = '2020' AND bl2.month = 'April' and bl2.month = 'May' and bl2.month = 'June'  AND l.month = 'April' and bl2.month = 'May' and bl2.month = 'June'
LEFT JOIN bldetails as bl3 on bl3.operation_no = l.operation_no  and l.year = '2020' AND bl3.month = 'July' and bl3.month = 'August' and bl3.month = 'September'
LEFT JOIN bldetails as bl4 on bl4.operation_no = l.operation_no and l.year = '2020' AND bl4.month = 'October' and bl4.month = 'November' and bl4.month = 'December'
LEFT JOIN terminals as t on t.id = l.terminal_id
GROUP BY t.name 
下面是输出


这可以使用条件聚合重写,并且应该从终端驱动,因为假设加载详细信息包含所有终端是不安全的

SELECT t.name as terminals, 
    sum(case when bl.month in ('January','February','march') then bl.barrels_net_qty else 0 end) as 'IST QTR', 
    sum(case when bl.month in ('April','May','June') then bl.barrels_net_qty else 0 end) as '2ND QTR', 
    sum(case when bl.month in ('July','AUgust','September') then bl.barrels_net_qty else 0 end) as '3RD QTR', 
    sum(case when bl.month in ('October','November','December') then bl.barrels_net_qty else 0 end) as '4TH QTR', 
    sum(coalesce(bl.barrels_net_qty,0))  as total 
FROM terminals as t 
left loadingdetails  as l on t.id = l.terminal_id
LEFT JOIN bldetails as bl on bl.operation_no = l.operation_no AND l.year = '2020' 
GROUP BY t.name ;

定义“它不起作用”。您对该SQL的意图是什么?查询实际上给了您什么?请提供您的问题的详细信息。谢谢您必须使用
终端
表作为连接链中的第一个表。或者使用RIGHT JOIN。terminals表只保留所有终端的列表,并且在loadingdetails表中被引用,its id也被引用。@Akina为什么这么说?@Martin查看GROUP BY expression。