【问题标题】:Column 'Comptes.CO_NUMERO' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause列“Comptes.CO_NUMERO”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中
【发布时间】:2017-07-31 09:23:55
【问题描述】:

我正在尝试按“第 1 列”和“第 5 列”以及第 2、3、4 列的总和进行分组

但它不起作用。请帮忙

这是我的查询

SELECT Post,Montant_Brut,Montant_AP,Net_1,Rubrique,OP_EXERCICE_COMPTA from(
select 
(case when left(C.CO_NUMERO,3) like '_9_' or left(C.CO_NUMERO,3) like '_8_' then (SUBSTRING(C.CO_NUMERO, 1, 1) + SUBSTRING(C.CO_NUMERO, 3, 1) + SUBSTRING(C.CO_NUMERO, 4, 1)) else left(C.CO_NUMERO,3) end ) as Post,
(case when left(C.CO_NUMERO,3) like '_9_' or left(C.CO_NUMERO,3) like '_8_' then sum (0) else (sum(C.CO_MONTANT)) end) as Montant_Brut,
(case when left(C.CO_NUMERO,3) like '_9_' or left(C.CO_NUMERO,3) like '_8_' then (sum(C.CO_MONTANT)) else sum(0) end) as  Montant_AP,
(case when O.OP_TYPE like 'Anouveaux' then (sum(C.CO_MONTANT)) else sum(0) end) Net_1,
(case when left(C.CO_NUMERO,2) like '_9' or left(C.CO_NUMERO,2) like '_8' then (SUBSTRING(C.CO_NUMERO, 1, 1) + SUBSTRING(C.CO_NUMERO, 3, 1)) when left(C.CO_NUMERO,2) like '25' then '24' else left (C.CO_NUMERO,2) end ) as Rubrique,
O.OP_EXERCICE_COMPTA 
from Operations O inner join Comptes  C on O.OP_ID = C.CO_OP_NUMERO WHERE ((C.CO_NUMERO between '21%' and '40%') or (C.CO_NUMERO  like '51%') ) and O.OP_EXERCICE_COMPTA = 11
) a group by Post, Rubrique

【问题讨论】:

    标签: sql-server tsql group-by aggregate-functions qsqlquery


    【解决方案1】:

    让我们尽力帮助您。

    首先,您需要对 group by 子句有所了解。正是 group by 将使您能够计算或总结结果,并且仍然能够保留密钥。

    因此,当您尝试对您的 c.co_montant 求和时,您就失去了使用 c.co_numero 的权利。

    除了这一点之外,您的查询对我来说几乎很好。

    试试这个版本:

    SELECT Post
    ,sum(Montant_Brut)
    ,sum(Montant_AP)
    ,sum(Net_1)
    ,Rubrique
    ,sum(OP_EXERCICE_COMPTA)
    from(
        select 
        (case when left(C.CO_NUMERO,3) like '_9_' or left(C.CO_NUMERO,3) like '_8_' then (SUBSTRING(C.CO_NUMERO, 1, 1) + SUBSTRING(C.CO_NUMERO, 3, 1) + SUBSTRING(C.CO_NUMERO, 4, 1)) else left(C.CO_NUMERO,3) end ) as Post,
        (case when left(C.CO_NUMERO,3) like '_9_' or left(C.CO_NUMERO,3) like '_8_' then 0 else (C.CO_MONTANT) end) as Montant_Brut,
        (case when left(C.CO_NUMERO,3) like '_9_' or left(C.CO_NUMERO,3) like '_8_' then (C.CO_MONTANT) else 0 end) as  Montant_AP,
        (case when O.OP_TYPE like 'Anouveaux' then (C.CO_MONTANT) else 0 end) Net_1,
        (case when left(C.CO_NUMERO,2) like '_9' or left(C.CO_NUMERO,2) like '_8' then (SUBSTRING(C.CO_NUMERO, 1, 1) + SUBSTRING(C.CO_NUMERO, 3, 1)) when left(C.CO_NUMERO,2) like '25' then '24' else left (C.CO_NUMERO,2) end ) as Rubrique,
        O.OP_EXERCICE_COMPTA 
    from Operations O inner join Comptes  C on O.OP_ID = C.CO_OP_NUMERO WHERE ((C.CO_NUMERO between '21%' and '40%') or (C.CO_NUMERO  like '51%') ) and O.OP_EXERCICE_COMPTA = 11
    ) a group by Post, Rubrique
    

    我采取了你的 sum 操作,然后将其放入 group by 子句的结果中。

    只要我无法测试该代码,我希望您告诉我它是否有效。

    【讨论】:

    • 非常感谢先生!它的工作原理这就是我想要的 SELECT Post, sum(Montant_Brut), sum(Montant_AP), sum(Net_1), Rubrique, OP_EXERCICE_COMPTA 再次感谢你的回答真的很有帮助
    猜你喜欢
    • 2014-05-14
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多