Hirdetés

Keresés

Új hozzászólás Aktív témák

  • VirsLee

    támogató

    válasz mr.nagy #3702 üzenetére

    A megoldás.
    - ki kell pattintani az adatok egy kulturáltabb formába
    - meghatározni, hogy az igény kevesebb vagy több, mint a rendelkezésre álló mennyiség
    - amennyiben kevesebb a rendelkezésre álló mennyiség, akkor arányosan mindenki kevesebbet kap (csak egész értéket)
    - a maradékokat szétosztjuk úgy, hogy a legkisebb igénytől a legnagyobbig emelkedő sorrendben kapnak kompenzációt

    Nézd el nekem, hogy a kiosztandó mennyiséget ennyi_van néven konstansként tettem bele, de kicsit már késő van :D

    Fiddle...

    create table NormalTeszt
    (
    igeny_id integer,
    igeny_elem char(3),
    mennyiseg integer
    );

    INSERT INTO NormalTeszt
    ([igeny_id], [igeny_elem], [mennyiseg])
    VALUES ('1', 'P01', '3'), ('1', 'P02', '5'), ('1', 'P03', '7'), ('1', 'P04', '6'), ('1', 'P05', '8'), ('1', 'P06', '9'),
    ('1', 'P07', '4'), ('1', 'P08', '5'), ('1', 'P09', '3'), ('1', 'P10', '4')
    ;

    select
    igeny_id,
    ennyi_van,
    igeny,
    igeny_elem,
    sorszam,
    mennyiseg,
    case when
    ennyi_van - igeny < 0
    and ennyi_van - uj_total > 0
    and sorszam <= (ennyi_van - uj_total) then uj_mennyiseg + 1
    else uj_mennyiseg
    end as kiosztott
    from (
    select
    igeny_id,
    ennyi_van,
    igeny,
    igeny_elem,
    mennyiseg,
    sorszam,
    case when ennyi_van / igeny < 1
    then cast(mennyiseg * (ennyi_van / igeny ) as integer)
    else mennyiseg end as uj_mennyiseg,
    sum(case when ennyi_van / igeny < 1
    then cast(mennyiseg * (ennyi_van / igeny ) as integer)
    else mennyiseg end)
    over(partition by igeny_id) as uj_total
    from (
    SELECT
    t.igeny_id,
    cast(40 as decimal (5,2)) as ennyi_van,
    t.igeny_elem,
    t.mennyiseg,
    row_number() over(partition by t.igeny_id order by mennyiseg asc) as sorszam,
    cast(sum(t.mennyiseg) over(partition by t.igeny_id) as decimal(5,2)) as igeny
    FROM NormalTeszt as t) as t1
    ) t2
    order by sorszam

Új hozzászólás Aktív témák