Am urmatorul SQL:
select left(fc.cont,1) as clasa,left(fc.cont,2) as subcls,
isnull((
SELECT sum(debit-credit) as sold
FROM A_lstFisaCont
where cont=fc.cont and
((datainr is not null and (fc.datainr>datainr or (fc.datainr=datainr and fc.nds>=nds))) or datainr is null) and
coduser=1
),0) as sold, fc.debit-fc.credit-fc.sid+fc.sic as sSold,fc.debit-fc.sid as sdebit,fc.credit-fc.sic as scredit
from A_lstFisaCont FC
where fc.coduser=1
order by fc.cont,fc.datainr,fc.NDS
Daca tabela A_lstFisaContcontine 50.000 de inregistrari, SQL-ul returneaza inregistrarile dupa aproximativ 4 minute (sau mai mult, in functie de cat de incarcat mi-e procesorul de la celelalte aplicatii deschise), ceea ce e foarte mult. Am calculator performant, nu asta este important; important este ca trebuie sa fac ca rezultatul generat sa iasa mai repede, fie prin rescrierea SQL-ului, fie prin regandirea algoritmului de calcul al campului Sold (aici e problema). Am incercat sa pun indecsi pe tabela, am folosit inclusiv Index Tuning Wizard, dar fara succes.
M-am gandit si la ideea de a crea coloana Sold in tabela A_lstFisaCont, sa ordonez inregistrarile asa cum am eu nevoie (Cont, DataInr, NDS) si sa parcurg aceasta tabela cu un cursor facand update pe coloana Sold inregistrare curenta = Sold din inregistrarea de deasupra + debit - credit. Din cate am inteles, insa, cursorul este foarte lent si nu ma ajuta.
Ce solutii posibile am la problema mea?
Multumesc anticipat,
Ovidiu