【问题标题】:SUM postgres not like expectedSUM postgres 不像预期的那样
【发布时间】:2020-07-21 19:55:48
【问题描述】:

查询后我想获取 account_move_line.balance AS ammounteur 的 SUM 当 account_id、partner_id、invoice_id 和 account_account.code =

SELECT     
    account_move_line.name, account_move_line.account_id,
    account_move_line.partner_id, account_move_line.invoice_id,
    account_move_line.journal_id,
    CASE 
       WHEN account_account.code LIKE '40%%'
          THEN '400000'
       WHEN account_account.code LIKE '44%%'
          THEN '440000'
       ELSE account_account.code    
    END AS ACCOUNTGL,
    CASE
       WHEN account_account.code = '702000' 
          THEN SUM(account_move_line.balance)
       ELSE (round(account_move_line.balance, 2))
    END AS AMOUNTEUR
FROM 
    public.account_move_line
JOIN 
    account_account ON (account_account.id = account_move_line.account_id)
WHERE 
    (account_move_line.date BETWEEN '2020-03-01' AND '2020-03-31')
GROUP BY  
    account_move_line.account_id, account_move_line.partner_id,
    account_move_line.invoice_id, account_move_line.journal_id,
    account_account.code, account_move_line.balance, account_move_line.name 
ORDER BY 
    account_move_line.account_id, account_move_line.invoice_id; 

我得到的结果:

NAME                        account_id  Partner_id  Invoice_id J_id accountgl   amounteur
"Taxe led"                  186         2476        1883        1   "702000"    -0.83
"Taxe eclairage"            186         2476        1883        1   "702000"    -0.11
"Taxe gros et petit blanc"  186         3090        1884        1   "702000"    -0.83
"Taxe eclairage"            186         2077        1885        1   "702000"     0.25
"Taxe eclairage"            186         2077        1887        1   "702000"    -0.25
"Taxe eclairage"            186         2077        1888        1   "702000"    -0.02
"Taxe led"                  186         2481        1916        1   "702000"    -0.83
"Taxe eclairage"            186         2481        1916        1   "702000"    -0.52 

我期待

NAME                        account_id  Partner_id  Invoice_id J_id accountgl   amounteur
                            186         2476        1883       1    "702000"    -0.94
"Taxe gros et petit blanc"  186         3090        1884       1    "702000"    -0.83
"Taxe eclairage"            186         2077        1885       1    "702000"     0.25
"Taxe eclairage"            186         2077        1887       1    "702000"    -0.25
"Taxe eclairage"            186         2077        1888       1    "702000"    -0.02
                            186         2481        1916       1    "702000"    -1.35

谢谢

【问题讨论】:

    标签: postgresql group-by sum case odoo


    【解决方案1】:

    我猜,但您似乎希望结果按 account_id、partner_id、invoice_id 和可能的 journal_id 分组。但是您已经告诉它按更多列进行分组。

    account_move_line.account_id,
    account_move_line.partner_id,
    account_move_line.invoice_id,
    account_move_line.journal_id,
    account_account.code,
    account_move_line.balance,
    account_move_line.name
    

    要进行分组,一行必须具有相同的帐户、合作伙伴、发票和日记帐 ID。加上相同的代码、余额和名称。

    将您的组减少到只有四个 ID。

    这意味着您无法选择某些列,因为该组具有该列的多个值。例如,名称。每个组将包含多个名称,不能选择单个名称。

    【讨论】:

    • 感谢您的回复,当我尝试从我的组中删除 account_account.code、account_move_line.balance、account_move_line.name 时,我遇到了一个问题,例如关于 « account_account.code » postgresql 错误列必须出现在 group by 子句中或在聚合函数中使用
    • @ChristopheCarion 与名称一样,该组将有许多代码;要求一个代码没有意义。您可以按该列进行分组,但正如您发现的那样,这会改变您的分组。你可以aggregate the codes。或者,您可以将其从选择列表中删除。我无法告诉您哪个是您查询的正确选择。
    猜你喜欢
    • 2014-05-16
    • 2019-08-16
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2012-06-13
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多