Tema: Re: MSSQL 2008 ir prioritetinis duomenu istraukimas
Autorius: BigM
Data: 2012-04-16 12:17:26
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?
>