在此查询中,按名称(CC.Nome)分组时遇到麻烦,您能帮帮我吗?
这是我的代码:
SELECT
Registadas.CodigoVisualizado As Codigo,
CC.Nome as Entidade,
CC.Documento AS Documento,
CC.DataDocumento as DataDocumento,
ISNULL(ROUND((SELECT SUM(CASE
WHEN tbCCEntidades.Natureza = 'R'
THEN tbCCEntidades.TotalMoedaReferencia
ELSE -tbCCEntidades.TotalMoedaReferencia
END)
FROM tbCCEntidades
WHERE CC.IDEntidade = Entidades.ID), 2), 0) AS Saldo,
CC.Natureza As Natureza
FROM
tbCCEntidades AS CC
INNER JOIN
tbEntidades Entidades ON Entidades.ID = CC.IDEntidade
INNER JOIN
tbEntidadesRegistadas Registadas ON Registadas.IDEntidade = Entidades.ID
发生的情况是此查询给出了这样混合的行:
答案 0 :(得分:1)
查询的真正问题是您没有正确关联子查询:
ISNULL(ROUND((
SELECT SUM( CASE
WHEN tbCCEntidades.Natureza = 'R'
THEN tbCCEntidades.TotalMoedaReferencia
ELSE - tbCCEntidades.TotalMoedaReferencia
END)
FROM tbCCEntidades
Where CC.IDEntidade = Entidades.ID ), 2), 0) AS Saldo,
在此FROM子句中,您没有为表指定别名,因此在WHERE子句中,过滤器的两面都没有过滤子查询。 CC
和Entidades
都在外部查询中,因此根本不过滤该子查询:每次都获取整个表中所有行的SUM。
仅凭此损坏的代码我无法确定修复程序。我猜想不是CC
的别名,而是需要在子查询中对表进行别名,并在过滤器的左侧使用该别名。
由于子查询仅返回SUM(),因此根本不需要GROUP BY,并且由于它在子查询中,因此无法通过在主查询中添加GROUP BY来改进SUM()。
答案 1 :(得分:0)
您必须在出现条件后立即按组放
喜欢
select CC.Name,SUM(something) from TableName where SomeCondition group by CC.Name
是的,您必须将不是聚合函数的所有内容都放到group by上,我建议您继续使用CTE表达式。然后对表中需要的其他字段进行联接。
答案 2 :(得分:0)
查询有效,它返回我需要的数据,我不知道的是将“ Group By”放在哪里,以便按CC.Nome排序结果:/
您只想对结果行进行排序?那不是GROUP BY
,而是ORDER BY
:
...
ORDER BY Entidade;