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'
此查询将返回表中的acct编号列表。基于此输出。我打算运行另一个Query并从其他表中选择各种数据。第二个查询包含各种连接,还有一个Group by和Order by。我想从第一个查询中选择每个帐号来自此查询的前1个数据,因为它是一个Big查询。
我打算使用带有For循环的Cursor来执行Process。它是一个高效的,还是只能使用Sql语句和循环来完成。任何Synatx都有助于以优化和省时的方式完成整个过程。
答案 0 :(得分:1)
您可以创建临时表并分配第一个查询中的所有帐号。将一个标识列放入临时表,以便在表格中循环。
create table #tmp_account(ID int identity not null,acct_num varchar(100)not null)
现在使用ID作为计数器循环遍历表。
Declare @vc_id int
SELECT @vc_id=1
set rowcount 1
WHILE EXISTS (SELECT 1 FROM #tmp_account )
begin
select @ac_nm=acct_num from #tmp_account where ID=@vc_id
-- put your 2nd query here..you can insert resultset into another temp table.
delete from #tmp_account where ID=@vc_id
select @vc_id=@vc_id+1
end
set rowcount 0
答案 1 :(得分:0)
考虑使用游标。
可以在这里找到一个例子。
http://infocenter.sybase.com/help/in...ses/X61512.htm
declare c_account 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'
@acc_num integer -- or whatever the column type is
begin
create table #foo ( col1 int, col2 varchar(255), col3 datetime)
open c_account
fetch c_account into @acc_num
while @@sqlstatus = 0
begin
insert into #foo (col1, col2, col3)
select top 1
col1, col2, col3
from
other_table ot
where
ot.col = @acc_num
fetch c_account into @acc_num
end
close c_account
deallocate c_account
end
go
希望有所帮助,但我怀疑如果你这样做是一系列连接,这可能会更快。