Keresés

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

  • Apollo17hu

    őstag

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

    Szia!

    Írtam a példádhoz egy favágó kódot. Legalábbis ha sql-ben kellene megoldani, akkor én úgy állnék neki, hogy meghatároznám a total igényt, az igénylők darabszámát, és ebből számolnék tovább.

    Akkor nincs gond, ha az igény többszöröse a kiosztható értéknek, mert akkor egyszerűen a kiosztható értéket az igénylők számával kell leosztani, és minden igénylő ennyit fog kapni. (Ezt már nem kódoltam bele, de értelemszerűen 20 db CASE WHEN-ről lesz szó...)

    Eddig írtam meg a kódot. Még megképeztem egy olyan mezőt, ami azt tartalmazza, hogy mennyi olyan kiosztható érték marad, amiből már csak 1-1 darabot lehet véletlenszerűen (vagy extra logikával?) odaadni az igénylőknek.

    select case when alap.kioszthato >= alap.total then 'N' else 'I' end hiany_fl
    ,case when alap.kioszthato >= alap.total then null
    when isnull(alap.darab, 0) = 0 then null
    else floor(alap.kioszthato / alap.darab) end ennyire_kell_csokkenteni
    ,case when alap.kioszthato >= alap.total then 0
    when isnull(alap.darab, 0) = 0 then null
    else alap.kioszthato - floor(alap.kioszthato / alap.darab) * alap.darab end ennyi_szetosztando_marad
    ,alap.*
    from
    (SELECT P1+P2+P3+P4+P5+P6+P7+P8+P9+P10+P11+P12+P13+P14+P15+P16+P17+P18+P19+P20 as total
    ,case when P1= 0 then 0 else 1 end + case when P2= 0 then 0 else 1 end + case when P3= 0 then 0 else 1 end + case when P4= 0 then 0 else 1 end + case when P5= 0 then 0 else 1 end + case when P6= 0 then 0 else 1 end + case when P7= 0 then 0 else 1 end + case when P8= 0 then 0 else 1 end + case when P9= 0 then 0 else 1 end + case when P10= 0 then 0 else 1 end + case when P11= 0 then 0 else 1 end + case when P12= 0 then 0 else 1 end + case when P13= 0 then 0 else 1 end + case when P14= 0 then 0 else 1 end + case when P15= 0 then 0 else 1 end + case when P16= 0 then 0 else 1 end + case when P17= 0 then 0 else 1 end + case when P18= 0 then 0 else 1 end + case when P19= 0 then 0 else 1 end + case when P20= 0 then 0 else 1 end as darab
    ,t.*
    FROM Teszts t) alap

  • varsam

    őstag

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

    Szia,

    közben úgylátszik eldobta a cuccot
    Itt elvileg meg tudod nézni: [link]

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