Welcome to Sign in | Help

Re: Optimizare SQL

  •  04-07-2009, 9:37 AM

    Re: Optimizare SQL

    In final am gasit o solutie si mai buna. Modific selectul initial a.i. sa scap de selectul interior. In loc de selectul interior, coloana sold va avea valoarea 0 pe toate inregistrarile. Adaug o coloana noua la DT care se numeste "CalculatedSum". Setul de date astfel obtinut il incarc intr-un DataTable. Parcurg DT cu ajutorul urmatoarei functii (C#) si calculez sold:

    if (dtCopy != null)
    {
    bool bFirstRow = true;
    decimal dPrevSold = 0;
    string sPrevCont = "";
    foreach (DataRow dr in dtCopy.Rows)
    {
    if (!dr["CONT"].ToString().Equals(sPrevCont))
    {
    dPrevSold = 0;
    sPrevCont = dr["CONT"].ToString();
    }
    if (bFirstRow)
    {
    dr["CalculatedSum"] = Convert.ToDecimal(dr["debit"]) - Convert.ToDecimal(dr["credit"]);
    bFirstRow = false;
    }
    else
    {
    dr["CalculatedSum"] = dPrevSold + Convert.ToDecimal(dr["debit"]) - Convert.ToDecimal(dr["credit"]);
    }
    dPrevSold = Convert.ToDecimal(dr["CalculatedSum"]);
    }
    }


    Dupa modificarea de mai sus toata treaba tine 10 secunde in loc de 4-5 minute cat tinea initial. (Cred ca se poate scapa de coloana noua, numai ca eu aveam DT asociat unui grid - caz special si facea figuri - evident, ca solutia se mai poate finisa)

    Consider problema rezolvata si multumesc tuturor celor care s-au implicat si au incercat sa ma ajute :)
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems