使用项目SUM Agregate在Postgresql中选择

时间:2017-12-29 01:32:32

标签: sql postgresql

我在下面的SQL中遇到问题:

  1. 字段mdoc_valor无法复制或添加,因为它是单个值且不是聚合的一部分,因此只有mprd_valor字段应该添加到子表中。也就是说,modc_valor字段位于父表中,mprd_valor字段位于子表中。

  2. 正在发生的事情是mdoc_valor字段正在根据汇总添加值,我不希望更改此字段。

  3. select dpto_codigo,
           dpto_descricao,
           sum(mdoc_valor) as Liquido,
           sum(mprd_valor) as Compras_Bruta
    from movdctos
    inner join movprodd1017 on (mdoc_transacao=mprd_transacao)
    inner join produtos on (prod_codigo=mprd_prod_codigo)
    inner join departamentos on (prod_dpto_codigo=dpto_codigo)
    where mdoc_datamvto>=CAST('2017-10-31' AS DATE) and
    mdoc_datamvto<=CAST('2017-10-31' AS DATE) and
    mdoc_dcto_tipo in ('EAQ') 
    group by 
    dpto_codigo,
    dpto_descricao
    

1 个答案:

答案 0 :(得分:0)

根据表格名称和您的问题,您似乎不需要对mdoc_valor字段求和。我从该字段中删除了聚合,将其添加到GROUP BY并添加了表的别名以提高可读性。

select dpto.dpto_codigo,
   dpto.dpto_descricao,
   mdoc.mdoc_valor as Liquido,
   sum(mprd.mprd_valor) as Compras_Bruta
from movdctos mdoc
inner join movprodd1017 mprd on (mdoc.mdoc_transacao=mprd.mprd_transacao)
inner join produtos prod on (prod.prod_codigo=mprd.mprd_prod_codigo)
inner join departamentos dpto on (prod.prod_dpto_codigo=dpto.dpto_codigo)
where mdoc.mdoc_datamvto>=CAST('2017-10-31' AS DATE) and
mdoc.mdoc_datamvto<=CAST('2017-10-31' AS DATE) and
mdoc.mdoc_dcto_tipo in ('EAQ') 
group by 
dpto.dpto_codigo,
dpto.dpto_descricao,
mdoc.mdoc_valor;

这应该为SUM(mprd_valor)dpto_codigodpto_descricao(重命名为Liquido)的每个组合提供mdoc_valor