Prośba o modyfikację skryptu

0

Mamy w pracy skrypt liczący nam ilość sprzedanych produktów z określonej grupy asortymentowej

select pers.NAZWU, sum(sprz.ILOSP)
from grpp,sprz,pers where sprz.idtowr=grpp.idtowr and grpp.IDGRPN =XXX
and sprz.wskus = 0 and pers.ID = sprz.ID_KSJ
and sprz.datsp >= :DATAOD and sprz.datsp <= :DATADO
group by pers.NAZWU

Wynikiem jest tabelka z nazwiskiem pracownika oraz ilość sprzedanych produktów z danej grupy (XXX to numer grupy asortymentowej stworzonej w innym module). Skrypt został napisany nam dawno temu przez informatyka, nowy niestety nie potrafi sobie z tym poradzić. Chciałbym wykorzystać ten skrypt do wewnętrznych rozliczeń, gdy mamy trzy grupy asortymentowe a produkty każdej z nich mają inną wartość punktową: na przykład sprzedałem 5 produktów z pierwszej grupy asortymentowej wartych po jednym punkcie, 3 produktu z drugiej, każdy za 2 punkty i 4 z trzeciej za trzy. W obecnym kształcie skrypt mówi nam, że sprzedaliśmy na przykład 5 produktów wartych po dwa punkty i sami musimy mnożyć. Czy da się by skrypt sam mnożył (51+32+4+3) i podawał liczbę punktów a nie produktów?

0
SELECT 
  pers.NAZWU, 
  sum((case
    when grpp.idgrpn = 1 then 11
    when grpp.idgrpn = 2 then 22
    when grpp.idgrpn = 3 then 33
    when grpp.idgrpn = 4 then 44
    else 01 end) * sprz.ILOSP) wartosc
FROM 
  grpp, 
  sprz, 
  pers
WHERE 
  sprz.idtowr = grpp.idtowr 
  AND grpp.IDGRPN in (1, 2, 3, 4)
  AND sprz.wskus = 0 
  AND pers.ID = sprz.ID_KSJ 
  AND sprz.datsp >= :DATAOD AND sprz.datsp <= :DATADO
GROUP BY 
  pers.NAZWU

1, 2, 3, 4 to id grup, które chcesz policzyć
11, 22, 33, 44 to wartość grupy. Mogą być wartości ułamkowe.
01 to wartość grup, które nie są wymienione w case
liczba grup w case powinna się zgadzać z liczbą grup w in

BTW zmieńcie "informatyka"

1 użytkowników online, w tym zalogowanych: 0, gości: 1