将匹配的名称与总计Firebird 2.5分组

时间:2013-06-24 13:37:31

标签: sql firebird firebird2.5

我做了一个基本的火鸟报告来呼吁所有债务人和交易 报告如下:


SELECT 
POSPAY.TXNO,
DEBTORS.COMPANY,
POSPAY.AMOUNT,
POSINVTRANS.TXDATE
FROM
POSPAY
INNER JOIN DEBTORS ON (POSPAY.ACCTNUMBER = DEBTORS.ACCOUNT)
INNER JOIN POSINVTRANS ON (POSPAY.TXNO = POSINVTRANS.TXNO)
WHERE
PAYMNTTYPID = '7' 
and  
weekly = :weekly and
txdate >= :fromdate and
txdate <= :todate

这可以正常工作,并为我提供债务人姓名,TXNO,TXDATE,AMOUNT的输出

我现在想写一份类似的报告,但需要对债务人进行分组并给出交易总数,即我需要输出债务人名称(如果约翰是两次,需要列出一次),总安排(约翰的交易总和)

我仍然需要债务人的内心联系,但不再需要posinvtrans,我认为它应该看起来像

SELECT 
POSPAY.TXNO,
DEBTORS.COMPANY,
POSPAY.AMOUNT

FROM
POSPAY
INNER JOIN DEBTORS ON (POSPAY.ACCTNUMBER = DEBTORS.ACCOUNT)

WHERE
PAYMNTTYPID = '7' 
and  
weekly = :weekly and
txdate >= :fromdate and
txdate <= :todate

Group by DEBTORS.COMPANY

但没有运气,在Group by上得到错误 '选择列表中的无效表达式(不包含在聚合函数或GROUP BY CLAUSE中)' 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

选择列表中的字段列表也必须列在group by列表中,或者是count(*)max(amount)等汇总函数。

问题是你没有告诉Firebird如何对POSPAY.TXNOPOSPAY.AMOUNT做什么,仅仅告诉你想要发生什么事情是不够的。

我建议您从查询中删除这两个字段,并选择DEBTORS.COMPANYsum(POSPAY.AMOUNT)作为起点。

答案 1 :(得分:0)

如果您使用GROUP BY,则需要在GROUP BY中添加一列,或在列上应用聚合函数。在您的示例中,您需要省略POSPAY.TXNO,因为这是特定于事务的(或者您可以使用聚合函数LIST),并且您需要将聚合函数SUM应用于{{获得总数:

AMOUNT