我希望我的表格中的一列总和,按日历季度分组。更具体地说,我现在拥有的是每月我想要的列的总和:
select month(emitido_date) as mes, year(emitido_date) as ano, ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) as totaliva
from documento as doc
inner join documento_serie as serie on serie.id = doc.documento_serie_id
inner join documento_detail as det on doc.id = det.documento_id
inner join phos_iva as iva on iva.id = det.iva_id
where serie.documento_categoria_id = 2 or serie.documento_categoria_id = 3
group by mes, ano
order by mes, ano desc
上面的代码很好,适合我。它按月返回我想要的组的总和。例如: 1月: 100, 2月: 200, 3月: 300.直到12月。
我的问题是如何按日历季度分组。具体来说,并寻找上面的例子,现在我想创建一个查询,它给我[1月,2月,3月] = 600,[4月,5月,6月],[7月,8月,9月]的值的总和],[十月,十一月,十二月]。我尝试使用下面的代码但是我收到了一个错误:
1111 - 无效使用群组功能。
select
sum(case when month(emitido_date) in (1,2,3) then ifnull(sum(det.quantidade),0) else 0 end) as Tri1,
sum(case when month(emitido_date) in (4,5,6) then ifnull(sum(det.quantidade),0) else 0 end) as Tri2,
select
sum(case when month(emitido_date) in (1,2,3) then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) else 0 end) as Tri1,
sum(case when month(emitido_date) in (4,5,6) then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) else 0 end) as Tri2,
sum(case when month(emitido_date) in (7,8,9) then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) else 0 end) as Tri3,
sum(case when month(emitido_date) in (10,11,12) then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) else 0 end) as Tri4,
year(emitido_date) as ano
from documento as doc
inner join documento_serie as serie on serie.id = doc.documento_serie_id
inner join documento_detail as det on doc.id = det.documento_id
inner join phos_iva as iva on iva.id = det.iva_id
where serie.documento_categoria_id = 3
group by year(emitido_date)
出了什么问题?
答案 0 :(得分:1)
尝试使用GROUP BY year(emitido_date)
代替group by ano
。
同样将ifnull(sum(det.quantidade),0)
替换为ifnull(det.quantidade,0)
,因为SUM
条款之外已有CASE
答案 1 :(得分:0)
您无法嵌套聚合函数。但你不需要。我想你想要:
select sum(case when month(emitido_date) in (1, 2,3 )
then det.quantidade else 0 end) as Tri1,
sum(case when month(emitido_date) in (4, 5, 6)
then det.quantidade else 0 end) as Tri2,
sum(case when month(emitido_date) in (7, 8, 9)
then det.quantidade else 0 end) as Tri3,
sum(case when month(emitido_date) in (10, 11, 12)
then det.quantidade else 0 end) as Tri4,
year(emitido_date) as ano