SQL Sumowanie rekordów jeżeli...

0

Witam mam pewien problem z którym nie mogę się uporać. Mianowicie mam następującą tabelę

SKU Ilość
9 1
8 1
8 1
8 1
7 0
6 0
2 1
1 0
1 1
1 5

Nie mam pojęcia jak mogę zrobić tak aby sumowało mi Ilość jeżeli SKU się powtarza. Chciałbym aby tabelka wyglądała następująco:

SKU Ilość
9 1
8 3
7 0
6 0
2 0
1 6
Próbowałem to rozwiązać poprzez GROUP BY i SUM ale niestety bez efektów.
0

select sku, sum(sku)
from tabelka
group by 1
order by 1 desc;

http://sqlfiddle.com/#!9/5e57d2/1

0

To niestety nie działa bo w group by mam 5 danych po których grupuje. .A poza tym te zapytanie tylko mi zliczy ilość rekordów SKU

0

Zapytanie mniej więcej tak wygląda

SELECT Prod.Nazwa. Prod.SKU, SUM(Prod.IloscRealna)AS Ilosc, OpisProd.CenaBrutto,Grupa.Towar
INNER JOIN OpisProd ON Prod.SKU = OpisProd.KodKreskowy WHERE Grupa.Towar = 1
GROUP BY
Prod.Nazwa, Prod.SKU,OpisProd.CenaBrutto
ORDER BY
Grupa.Towar

0

to jest całe zapytanie i nie wiem czy da się to jakąś zrobić, żeby sumował ilość produktów w których SKU jest identyczne. Próbowałem też użyć CASE ale też mi nie wychodziło

0

jaka jest zależność grupy z resztą tabel?

0

Dla SQL Servera:

SELECT prod.nazwa. prod.sku 
       , case when count(*)=1 then 0 else Sum(prod.iloscrealna) end AS ilosc
       , opisprod.cenabrutto 
       , grupa.towar 
FROM   prod 
       INNER JOIN opisprod 
               ON prod.sku = opisprod.kodkreskowy 
WHERE  grupa.towar = 1 
GROUP  BY prod.nazwa 
          , prod.sku 
          , opisprod.cenabrutto 
ORDER  BY grupa.towar 
0

w grupie jest przechowywany tylko rodzaj grupy. tzn. zabawki, słodycze itd. id grupy jest w tabeli Prod. i stąd wiem że cukierek jest w grupie słodycze

0

Spróbuj usunąć prod.nazwa i pewnie też cene brutto.
Jak masz:
Nazwa SKU ilosc
a 1 1
b 1 2

i dasz group by nazwa, sku to nie zsumuje ci ilości, bo będą to 2 osobne rekordy

Jak dasz select sku i group by sku:
SKU ilosc
1 1
1 2

to wtedy Ci zliczy

0

@baant a po co masz znać zależność, skoro tego nie dotyczy pytanie.
@stuart18 moje rozwiazanie Ci nie pasuje

0

Panczo to o niestety nie działa u mnie mam to na firebirdsql. Baant jak to skasuje to wiem, ze będzie działało :) ale nie mogę tego skasować bo nazwa i cena tez mi są potrzebne

0
select prod.nazwa, prod.sku, (select sum(p.ilosc) from prod p where prod.sku = p.sku)
from prod 
group by prod.nazwa, prod.sku
order by prod.sku

a coś takiego? (http://sqlfiddle.com/#!15/ca7969/5)

0

Jeżeli to wersja >2 to mozesz tak:

select
    nazwa
    ,sku
    ,case when i = 1 then 0 else iloscr end iloscr
    ,cenabrutto
    ,towar
from (
    SELECT prod.nazwa
           , prod.sku 
           ,COUNT(*) as i
           ,SUM(prod.iloscrealna) ilosc
           , opisprod.cenabrutto 
           , grupa.towar 
    FROM   prod 
           INNER JOIN opisprod 
                   ON prod.sku = opisprod.kodkreskowy 
    WHERE  grupa.towar = 1 
    GROUP  BY prod.nazwa 
              , prod.sku 
              , opisprod.cenabrutto 
    ORDER  BY grupa.towar
) as a
0

też do końca nie o to chodzi bo powinien wypisać tylko raz pozycje numer 1 z wartością 16 ale blisko :)

0

Skoro jedno SKU może mieć różne nazwy i chcesz je zwracać w tym zapytaniu to nie wypisze takiego rekordu raz, tylko tyle ile jest nazw. Ewentualnie jakbyś był uparty to możesz sobie posklejać nazwy w jedną...

0

@stuart18: ty się z nami bawisz? Zapytanie które podałeś jest niepoprawne, nijak ma się do danych, które podałeś w pierwszym poście, a teraz piszesz że powinno mieć wartość 16, choć z pierwszego posta wynika, że 6...

Nie mam szklanej kuli, nie wiem jakie masz dane, mogę operować tylko na tym co sam podajesz...

0

a coś takiego? (http://sqlfiddle.com/#!15/ca7969/5) odwołałem się do tego przykładu, który zrobiłeś

0

Nie bardzo weim jak SKU może mieć 2 nazwy, ale mozna obejść tak:
http://sqlfiddle.com/#!15/ca7969/8

0

o to mi chodziło

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