2013-06-24 28 views
1

我做了一个基本的火鸟报告对所有债务人和交易 报告看起来拨打如下分组匹配的名称与合计火鸟2.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,金额

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

我还需要innerjoin债务人但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子句)无效表达” 任何建议得到错误的集团通过 ?

回答

1

的在选择列表中的字段列表必须要么也在group by列表中列出或者是聚合功能,如count(*)max(amount)

的问题是,你还没有告诉火鸟做什么用POSPAY.TXNOPOSPAY.AMOUNT和它不足以告诉你什么想要发生在他们身上。

我建议你从查询中删除的2场,并有DEBTORS.COMPANYsum(POSPAY.AMOUNT)为出发点选择列表。

+0

非常感谢Nick Upson,报告​​的工作原理与我想要的完全一样 –

0

如果您使用GROUP BY,您需要在GROUP BY中包含一列或在该列上应用聚合函数。在您的例子,你需要离开了POSPAY.TXNO,因为这是交易的特定(或者你可以使用聚合函数LIST),你需要聚合函数适用SUMAMOUNT拿到总:

SELECT 
DEBTORS.COMPANY, 
SUM(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