[ bass1 @ 17.12.2004. 08:57 ] @
Pozdrav,
Imam sledeći problem:
Code:

SELECT datepart(year, p.Datum) as Godina,
sum(p.Kolicina) as Ukupno,
--...
dbo.Funkcija(datepart(year, p.Datum)) as Rezultat
FROM Promet p
where p.ProizvodID in (select ProizvodID from Pips04..KorisnickaGrupaProizvodaStavke where KorisnickaGrupaProizvodaID = @grupaID)
and (datepart(year, p.Datum) = @god or @god = 0)
GROUP BY datepart(year, p.Datum) ORDER BY datepart(year, p.Datum)
end


Ovaj query mi kaže 'p.Datum is invalid in the select list because it is not included in the group by list'. Problem je u tome što sam datepart(year, p.Datum) proslijedio kao parametar funkciji. Ako izostavim funkciju, query radi sasvim normalno. Ima li neko ideju koja ne podrazumijeva izostavljanje funkcije?
[ jablan @ 17.12.2004. 09:06 ] @
A da dodaš i funkciju u spisak GROUP BY polja?
[ bass1 @ 17.12.2004. 16:34 ] @
da, to sam otkrio oko 2 minuta posle postavljanja ovog posta hvala
[ CoyoteKG @ 20.12.2011. 11:24 ] @
sorry za ozivljavanje ovako stare teme, ali da ne otvaram novu.

Da li ima neko volje da mi najprostijim primerom objasni cemu sluzi group by?

Guglam, i vidim primere, ali i dalje ne mogu da shvatim.

[ Dusan Kondic @ 20.12.2011. 12:02 ] @
Code:

/*
Na košarkaškoj utakmici je vođena evidencija postignutih poena.
U zavisnosti od toga da li je koš postignut iz slobodnog bacanja,
iz igre, ili je u pitanju "trojka", poeni su 1, 2 ili 3.
*/
DECLARE @T TABLE(Kosarkas NVARCHAR(50), BrojPoena INT)

INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Bogdan Kondić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Ognjen Simić', 3)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Veljko Ivanović', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Bogdan Kondić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Filip Vasić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Veljko Kondić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Nikola Bogdanović', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Filip Vasić', 1)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Bogdan Kondić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Veljko Kondić', 2)

--Koliko je ukupno postignuto poena
SELECT SUM(BrojPoena) AS UkupnoPoena FROM @T

--Koliko je svaki košarkaš postigao poena
SELECT Kosarkas, SUM(BrojPoena) AS BrojPoena FROM @T GROUP BY Kosarkas

--Koliko je ukupno dato koševa
SELECT COUNT(BrojPoena) AS UkupnoKoseva FROM @T

--Koliko je svaki košarkaš dao koševa
SELECT Kosarkas, COUNT(BrojPoena) AS BrojKoseva FROM @T GROUP BY Kosarkas

Dakle, agregatne funkcije tipa SUM, COUNT i slične možeš da grupišeš po nekom polju. Jasnije?
[ CoyoteKG @ 20.12.2011. 12:24 ] @
Aha, daleko jasnije

Znaci ukoliko ne bih koristio SUM, onda mi ni ne treba Group By.

Tada kad bih uradio

SELECT kosarkas, brojpoena

dobio bih celu listu svih pogodaka sa kosarkasima koji su postigli kos. I onda bi mi se kosarkasi ponavljali onoliko puta koliko su postigli koseva.
Da bih to izbegao, i dobio ukupan broj poena od svakog kosarkasa ponaosob, onda moram da koristim SUM, i da grupisem rezultate po kosarkasu. A SUM mi verovatno ne bi radio bez group by?

Nego mi opet nije jasno, ovde na poslu, gledam moji prethodnici kakve su upite pravili. I bukvalno u Group By uvek stavljaju sve iz SELECT linije osim agregatne funkcije. Zato me to buni.

Znaci recimo

Code:

SELECT i.brojkupca ,i.imekupca, sum(a.osnovnacena) as promet_bez_PDV, sum(a.cenasaporezom + a.osnovnacena) as promet_sa_pdv  , nadzorid
FROM porez a, arhivaracuna  i
where a.brojkase = i.brojkase
and a.brojracuna = i.brojracuna
and a.datumracuna = i.datumracuna

and nadzorid like '223%'
and i.prodavnica = 1
and i.idatumracuna between '12/12/2011' and '12/18/2011'
group by i.brojkupca, i.imekupca,  nadzorid
order by 3 desc


Jel ovo znaci da ukoliko taj neki kupac, nema broj ili ime ili svog nadzornika (sto ipak nije moguce), nece biti u rezultatima? Ukoliko bi pisalo samo group by i.brojkupca, koja bi bila razlika u odnosu na prethodni upit

[Ovu poruku je menjao CoyoteKG dana 20.12.2011. u 13:39 GMT+1]

[Ovu poruku je menjao CoyoteKG dana 20.12.2011. u 13:39 GMT+1]
[ Dusan Kondic @ 20.12.2011. 12:44 ] @
Najbolji odgovor na sva tvoja pitanja je: "Probaj."
Najbolji način da naučiš je da probaš.

Odgovori, ipak...

Sta bi bilo kad bih
1. odatle izbacio group by funkciju, sta bih dobio?
--Grešku

2. ukoliko bih stavio Group by broj poena ?
--Grešku

3. ukoliko bih stavio Group by kosarkas, broj poena ?
--Dobio bi sve redove kao da si izvršio običan SELECT bez sumiranja i grupisanja.


1. Dakle, ukoliko bih stavio samo select Kosarkas, sum(broj poena), bez group by ne bih dobio nista?
Upit meni tu izlista sve kosarkase koji su postigli pogodak i za njih veze, odnosno sabere broj poena.
--Greška

2. Ukoliko bih stavio group by broj poena, da li bih dobio nesto? Pretpostavljam nista posto ne moze da "sabere kosarkase", a kad bi moglo, onda bih dobio listu 1,2,3 u koloni broj artikala, a u koloni kosarkas bi mi se sabrali kosarkasi koji su postigli te pogotke :).
--Greška

3. ovamo na poslu cesto vidjam da na kraju upita stavljaju u group by sve iz SELECT linije. Zato pitam ovo, jer mi nije jasno cemu sluzi.
--Pogledaj malo pažljivije. Verovatno postoji bar jedno polje nad kojim je izvršena neka agregatna funkcija. To polje ne postoji u GROUP BY klauzuli.