sql execute block error: multiple rows in singleton select
sql execute block error: multiple rows in singleton select
我正在努力使下面的代码正常工作。每当我尝试时,它都会给我错误 multiple rows in singleton select
execute block returns (order integer,sales decimal(18,2))
as
declare variable client varchar(10);
begin
for
select clientcode from clients
into :client
do
begin
select order_id, sum(amount)sales from orders where order_date='today' and clientcode= :client
group by 1
into :order,:sales;
suspend;
end
end
错误
Error in result_fetch(res@ptr, n) :
nanodbc/nanodbc.cpp:2593: HY000: [ODBC Firebird Driver][Firebird]multiple rows in singleton select
如果我改变第二个select,它returns一个集合,但只有第一个出现。
select first(1) order_id, sum(amount)sales from orders where order_date='today' and clientcode= :client
group by 1
感谢任何帮助
如果您在 PSQL 中使用 select
,那么它最多只能生成一行。给定错误,查询生成多行。
如果需要产生多行,那么就得用for select ... do
,例如:
execute block returns (order integer,sales decimal(18,2))
as
declare variable client varchar(10);
begin
for select clientcode
from clients
into :client
do
begin
for select order_id, sum(amount)sales
from orders
where order_date='today' and clientcode= :client
group by 1
into :order,:sales
do
begin
suspend;
end
end
end
请注意,这段代码最好写成 inner join
。
select o.order_id, sum(o.amount) as sales
from client c
inner join orders o
on o.clientcode = c.clientcode
group by c.clientcode, o.order_id
我正在努力使下面的代码正常工作。每当我尝试时,它都会给我错误 multiple rows in singleton select
execute block returns (order integer,sales decimal(18,2))
as
declare variable client varchar(10);
begin
for
select clientcode from clients
into :client
do
begin
select order_id, sum(amount)sales from orders where order_date='today' and clientcode= :client
group by 1
into :order,:sales;
suspend;
end
end
错误
Error in result_fetch(res@ptr, n) :
nanodbc/nanodbc.cpp:2593: HY000: [ODBC Firebird Driver][Firebird]multiple rows in singleton select
如果我改变第二个select,它returns一个集合,但只有第一个出现。
select first(1) order_id, sum(amount)sales from orders where order_date='today' and clientcode= :client
group by 1
感谢任何帮助
如果您在 PSQL 中使用 select
,那么它最多只能生成一行。给定错误,查询生成多行。
如果需要产生多行,那么就得用for select ... do
,例如:
execute block returns (order integer,sales decimal(18,2))
as
declare variable client varchar(10);
begin
for select clientcode
from clients
into :client
do
begin
for select order_id, sum(amount)sales
from orders
where order_date='today' and clientcode= :client
group by 1
into :order,:sales
do
begin
suspend;
end
end
end
请注意,这段代码最好写成 inner join
。
select o.order_id, sum(o.amount) as sales
from client c
inner join orders o
on o.clientcode = c.clientcode
group by c.clientcode, o.order_id