Witajcie,
Pomożecie napisać zapytanie, które zwróci ilość zamówień w podziale na lata w formie jak poniżej.
2011 2012
68 32
Mam baze o nazwie SZKOLENIE tabele KONTRAHENT , TOWAR, ZAMOWIENIE , ZAMOWIENIE_POZYCJE
KONTRAHENT ( KONTRAHENT_ID, PIERWSZE_IMIE, DRUGIE_IMIE, NAZWISKO,TELEFON,EMAIL)
TOWAR (TOWAR_ID,NUMER_KATALOGOWY, NAZWA,CENA,STAN,AKTYWNY)
ZAMOWIENIE (ZAM_ID, KONTRAHENT_ID, NUMER, DATA)
ZAMOWIENIE_POZYCJE (ZAM_POZ_ID, ZAM_ID, TOWAR_ID, CENA, ILOSC, WARTOSC)
Zakładam, że chodzi o zestawienie ilości zamówień per rok czy tak?
Jeśli tak to proponuję
select sum(zam_poz.ilosc) ILE, zam.DATA rok
from zamowienie zam, zamowienie_pozycje zam_poz
where zam.zam_id = zam_poz.zam_id
group by zam.DATA
order by zam.DATA
oraz w zależności od tego co to za baza odpowiedniego pivota zamieniającego kolumny z wierszami abyś miał w takiej formie jak podałeś
Podaj konkretny DDL tabel, przykładowe dane, co to za dystrybucja bazy danych i wtedy podamy dokładniej rozwiązanie
SELECT TO_CHAR(DATA, 'YYYY') rok, Count(*) FROM ZAMOWIENIA GROUP BY TO_CHAR(DATA, 'YYYY') ORDER BY TO_CHAR(DATA, 'YYYY')
woolfik pierwszy skrypt który napisałeś zadziałał. TO_CHAR nie rozpoznaje
Skrypt ma zwrócić ilość zamówień w podziale na lata np. w 2011 łączenie zostało zrobionych np. 10324 zamówienia.
W załączniku skrypt bazy.
Jak chcesz kogoś zawołać to dodaj @ przed nickiem czyli @woolfik, wtedy ktoś dostanie powiadomienie, że się go "woła" w danym temacie
To po pierwsze. Po drugie ze skryptu wnioskuję, że jest to MSSQL więc sql będzie wyglądał mniej więcej tak:
SELECT SUM(zam_poz.ilosc) ILE, datepart(year, zam.DATA) rok
FROM zamowienie zam, zamowienie_pozycje zam_poz
WHERE zam.zam_id = zam_poz.zam_id
AND datepart(year, zam.DATA) = 2011
GROUP BY datepart(year, zam.DATA)
ORDER BY datepart(year, zam.DATA)
w nawiązaniu do poprzedniego zapytania. Pytanie kolejne czy ma to być ilość zamówień (wtedy trzeba użyć count) czy suma towarów (wtedy zostaje sum)
Jeśli ilość zamówień to:
SELECT count(zam.zam_id) ILE, datepart(year, zam.DATA) rok
FROM zamowienie zam
WHERE datepart(year, zam.DATA) = 2011 --tu podajesz warunek na rok jeśli chcesz na wszystkie to wystarczy wywalić ten warunek
GROUP BY datepart(year, zam.DATA)
ORDER BY datepart(year, zam.DATA)
Ok @woolfik rozwiązanie jest dobre dzięki za pomoc.
Mam jeszcze dwa zadania z tej bazy:
2. Napisać zapytanie, które zwróci łączną ilość zamówień 2 kontrahentów, którzy złożyli najwięcej zamówień.
np. I
26
3.Napisz zapytanie, które zwróci różnicę wartości między zamówieniem o najwyższej wartości, a zamówieniem o najniższej wartości.
np. R
105565.09
poniżej masz link do identycznego zadania jak Twoje zadanie nr 3 tylko na bazie Northwind
http://anonco.pl/northwind-examples-e3-sql-group-by-groupby/
zmieniasz nazwy tabel i kolumn i gotowe
Tutaj masz to samo zadania co Twoje zadanie nr 2 tylko na bazie Northwind
http://anonco.pl/northwind-examples-e4-sql-group-by-groupby-sum/
@KiK dzięki za info i pomoc.