join和group by query在firebird 2.1中工作但在1.5中不工作

时间:2014-01-28 17:46:45

标签: sql firebird

我有以下查询在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 错误发生在第二个选择

的开头

2 个答案:

答案 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