我做了一个基本的火鸟报告来呼吁所有债务人和交易 报告如下:
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中)' 有什么建议吗?
答案 0 :(得分:1)
选择列表中的字段列表也必须列在group by
列表中,或者是count(*)
,max(amount)
等汇总函数。
问题是你没有告诉Firebird如何对POSPAY.TXNO
和POSPAY.AMOUNT
做什么,仅仅告诉你想要发生什么事情是不够的。
我建议您从查询中删除这两个字段,并选择DEBTORS.COMPANY
,sum(POSPAY.AMOUNT)
作为起点。
答案 1 :(得分:0)
如果您使用GROUP BY
,则需要在GROUP BY
中添加一列,或在列上应用聚合函数。在您的示例中,您需要省略POSPAY.TXNO
,因为这是特定于事务的(或者您可以使用聚合函数LIST
),并且您需要将聚合函数SUM
应用于{{获得总数:
AMOUNT