我有以下查询在firebird 2.1中工作正常但是我不能让它在1.5中具有完全相同结构的数据库上工作
select c.printchecknumber, v.voidamount
from checks c
join (select checknumber, sum(voidamount) as voidamount
from checkitem
where voidtype =1
group by checknumber) v on c.checknumber = v.checknumber
order by c.printchecknumber
有什么想法吗?
错误消息是 令牌无效 动态SQL错误 SQL错误代码= -104 令牌未知 - 第1行,char 61 错误发生在第二个选择
的开头答案 0 :(得分:3)
我猜测Firebird 1.5不支持from
子句中的子查询。无论如何,您可以将其编写为更简单的查询。以下应该做你想要的:
select c.printchecknumber, sum(voidamount) as voidamount
from checkitem ci join
checks c
on ci.checknumber = c.checknumber
where ci.voidtype =1
group by c.printchecknumber;
编辑:
如果您想加入checkid
,那么这可能会有效:
select c.printchecknumber, c.checkid, sum(voidamount) as voidamount
from checkitem ci join
checks c
on ci.checknumber = c.checknumber
where ci.voidtype =1
group by c.printchecknumber, c.checkid;
答案 1 :(得分:1)
我不知道为什么它不适用于早期的系统,我需要知道错误消息才能提供帮助,但以下内容适用于任何支持over()子句的sql,我相信firebird会这样做用3.0
select c.printchecknumber,
sum(v.voidamount) over (partition by printchecknumber)
from checks c
join checkitem v on c.checknumber = v.checknumber and v.voidtype = 1