Detaliai neskaičiau viso thread'o, bet aš asmeniškai daryčiau denormalizaciją toje pačioje lentelėje arba atskirame agregate, kuris perskaičiuojamas pilnai/iš dalies pagal atitinkamus įvykius. Bet kuriuo atveju dinamiškai išskaičiuoti įvairius atvejus bus imlu performance'ui. "Jornada Del Muerto" <jornada@lythum.lt> wrote in message news:jm1msp$3lq$1@trimpas.omnitel.net... > Sveiki, > > Turiu tokia situacija su MSSQL 2008, kada reikia istraukti tam tikra > informacija prioriteto tvarka isrenkant viena ar kita irasa is lentos. > > Trumpai aktuali traukimui struktura: > > Siuntos > ---------- > Id > KlientoId > MiestoId > GatvesId > Svoris > > SiuntuKainos > ---------- > Id > KlientoId > MiestoId > SvorisNuo > SvorisIki > > Dilema ta, kad kainu yra 4 tipai (tiksliau nuo siol bus). Egzistuoja > (jeigu id=0 reiskia skirta visiems): > > 1. Bendros/globalios kainos siuntoms (KlientoId = 0, miestoId = 0); > 2. Bendros/globalios kainos konkreciam miestui (KlientoId = 0, miestoId = > X) - (sis kainos variantas atsiras tik dabar); > 3. Kliento bendros kainos (KlientoId = X, miestoId = 0); > 4. Kliento kainos konkreciam miestui (KlientoId = X, miestoId = X). > > Prioriteto tvarka bandoma priskirti sias kainas: 4, 3, 2, 1. > > Kaip sakant jei klientas turi savo kainas konkreciam miestui tai jas, > jei tam miestui ner, bet yra aplamai kliento kaina, tada priskiriama ji, > jeigu nera kliento kainu bet globalios kainos turi kainas tam miestui tai > si kaina, jeigu nera siam miestui globalios kainos tada bendra kaina. > > > Siuo momentu as darau taip: > > SELECT > kainosId, > CASE > WHEN K4.Id Is Not Null THEN K4.Id > WHEN K3.Id Is Not Null THEN K3.Id > WHEN K2.Id Is Not Null THEN K2.Id > ELSE K1.Id END AS "priceId", > ......... kiti laukai.... > FROM > Siuntos S > LEFT JOIN > SiuntuKainos K1 On K1.KlientasId = 0 And K1.MiestasId = 0 And S.Svoris > BETWEEN K1.SvorisNuo And K1.SvorisId And ...kitos salygos... > LEFT JOIN > SiuntuKainos K2 On K2.KlientasId = 0 And K2.MiestasId = S.MiestasId And > S.Svoris BETWEEN K2.SvorisNuo And K2.SvorisId And ...kitos salygos... > LEFT JOIN > SiuntuKainos K3 On K3.KlientasId = S.KlientasId And K3.MiestasId = 0 > And S.Svoris BETWEEN K3.SvorisNuo And K3.SvorisId And ...kitos salygos... > LEFT JOIN > SiuntuKainos K4 On K4.KlientasId = S.KlientasId And K4.MiestasId = > S.MiestasId And S.Svoris BETWEEN K4.SvorisNuo And K4.SvorisId And ...kitos > salygos... > > > Tai vat, kokie pasiulymai optimizuoti si shmota? :) > > PS. > Viskas kaip ir veikia, tik dabar reikes dadeti kaina Nr 2 (Globalios > miestu kainos), tai susimasciau gal cia ka eitu pagerinti? >