Sybase循环,由每个从select语句获得的结果执行查询组成。

3
SELECT distinct(a.acct_num)
FROM customer_acct a,
customer_acct_history b LIKE "%000%"    
WHERE a.acct_num *= b.acct_num AND acct_type='C'

根据这个查询的输出,它返回了很多客户账号。我想做一个选择查询,为每个账号返回前1个。我计划将第一个查询的输出链接到第二个SQL中,如where a.acct_num=(第一个查询的输出)。我想在循环中执行此操作并为每个账号选择前1个。如何继续进行将不胜感激。

1个回答

1

使用游标的好地方:

declare curs cursor
for 
SELECT distinct(a.acct_num)
FROM customer_acct a,
customer_acct_history b LIKE "%000%"    
WHERE a.acct_num *= b.acct_num AND acct_type='C'

OPEN curs 

DECLARE @acct_num INT

fetch curs into @acct_num

/* now loop, processing all the rows
** @@sqlstatus = 0 means successful fetch
** @@sqlstatus = 1 means error on previous fetch
** @@sqlstatus = 2 means end of result set reached
*/
while (@@sqlstatus != 2)
BEGIN
   SELECT Sometning FROM somwhere where @acct_num = ...
   fetch curs into @acct_num
END

GL!


1
我们能仅使用循环来完成这个任务吗?因为游标会带来性能问题 :) - pravin_23
你可以在原始查询中使用join操作,这将是最快速和最优雅的解决方案。 - www
2
你能写一小段代码或语法来说明如何使用连接吗?这对我继续进行很有帮助。 - pravin_23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接