Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa GROUP BY

[es] :: Baze podataka :: Problem sa GROUP BY

[ Pregleda: 3631 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

postar2
Telekom Srbija A.D.
Beograd

Član broj: 35119
Poruke: 10
*.telekom.yu.



Profil

icon Problem sa GROUP BY25.10.2007. u 09:06 - pre 200 meseci
Cao svima, prvo da kazem da sam pocetnik, pa ako sam nesto pocetnicki zbrljao, SORRY !!!

Evo koda :

SELECT K.korisnik, T.Usluga, E.Status, E.Datum_Promene
FROM Evidencija AS E, Korisnik AS K, Tip_usluge AS T
WHERE E.ID_korisnik=K.ID_korisnik And K.korisnik Like [Naziv Korisnika];

Ideja je da iz tri različite tabele vučem podatke koji su mi bitni za prikaz pretrage po nazivu korisnika : K.korisnik Like [Naziv Korisnika]

Sve je u redu osim što mi izbacuje duplirane podatke:

korisnik Usluga Status Datum_Promene
Pera kruške Čeka 15.06.2007
Pera kruške Čeka 15.06.2007
Pera kruške Evidencija 10.06.2007
Pera kruške Predato 16.06.2007
Pera kruške Predato 19.06.2007
Pera kruške Završeno 20.06.2007
Pera jabuke Čeka 15.06.2007
Pera jabuke Čeka 15.06.2007
Pera jabuke Evidencija 10.06.2007
Pera jabuke Predato 16.06.2007
Pera jabuke Predato 19.06.2007
Pera jabuke Završeno 20.06.2007
Pera banane Čeka 15.06.2007
Pera banane Čeka 15.06.2007
Pera banane Evidencija 10.06.2007
Pera banane Predato 16.06.2007
Pera banane Predato 19.06.2007
Pera banane Završeno 20.06.2007
Pera Pomorandže Čeka 15.06.2007
Pera Pomorandže Čeka 15.06.2007
Pera Pomorandže Evidencija 10.06.2007
Pera Pomorandže Predato 16.06.2007
Pera Pomorandže Predato 19.06.2007
Pera Pomorandže Završeno 20.06.2007
Mika kruške Evidencija 15.06.2007
Mika banane Evidencija 15.06.2007
Mika jabuke Evidencija 15.06.2007
Mika pomorandže Evidencija 15.06.2007

Kada dodam GROUP BY :


SELECT K.korisnik, T.Usluga, E.Status, E.Datum_Promene
FROM Evidencija AS E, Korisnik AS K, Tip_usluge AS T
WHERE E.ID_korisnik=K.ID_korisnik And K.korisnik Like [Naziv Korisnika]
GROUP BY K.korisnik
ORDER BY K.korisnik, T.Usluga, E.Status, E.Datum_Promene;

Izadje mi poruka :


You tried to execute a query that does not include the specified expression 'Usluga' as part of an aggregated function

Gde grešim i šta treba da ispravim ?

HVALA !!!
??? !!! ???
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.simex-su.co.yu.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Problem sa GROUP BY25.10.2007. u 11:13 - pre 200 meseci
U prvom upitu nisi povezao tabelu 'Tip_usluge' sa ostalim tabelama.

U drugom upitu nisi naveo sve kolone iz SELECT dela i u GROUP BY deo, verovatno treba:
Code:
...
 GROUP BY K.korisnik, T.Usluga, E.Status, E.Datum_Promene
...

"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Problem sa GROUP BY25.10.2007. u 14:28 - pre 199 meseci
Kad bi koristio JOIN umesto WHERE da povezes tabele, bilo bi jasnije sta se radi i lakse bi se nasla greska. Formatiranje takodje pomaze.

Tvoj iskaz se mose napisati ovako (samo sam prelomio linije i pomerio neke linije unutra):
Code:

SELECT 
  K.korisnik, 
  T.Usluga, 
  E.Status, 
  E.Datum_Promene
FROM 
  Evidencija AS E, 
  Korisnik AS K, 
  Tip_usluge AS T
WHERE 
  E.ID_korisnik=K.ID_korisnik 
  And K.korisnik Like [Naziv Korisnika];

Sad se vidi ljasno da imas tri tabele a samo su dve povezane. Chachka je to odmah primetio, ja nisam. Ali, formatiranje je i meni otvorilo oci. To sto nisi povezao i trecu tabelu jeste jedan od razloga sto se javljaju duplikati. Tvoj iskaz (bez trece tabele) u stvari povezuje tabele Evidencija i korisnik, da bi procitao naziv korisnika kao K.Korisnik. Onda se sve to pomnozi sa tabelom Tip_Usluge , i dobijes za svaki red iz tabele Evidencija onoliko redova koliko imas vredova u tabeli Tip_Usluge.

Dalje, WHERE uslov ima dve funkcije u tvom izrazu.
Code:
WHERE E.ID_korisnik=K.ID_korisnik
sluzi da 'poveze' tabele, a deo
Code:
And K.korisnik Like [Naziv Korisnika];
sluzi da izfiltrira vraceni set podataka po odredjenom parametru (Ovo je Access kveri pretpostavljam, ni jedan drugi dijalekt SQL ne koristi parametre na ovaj nacin) . Povezivanje je bolje (preglednije, manje podlozno greskama) raditi sa JOIN a WHERE ostaviti za definisanje filtera.

Tvoj kod bi trebao da izgleda nekako ovako:
Code:

SELECT 
  K.korisnik, 
  T.Usluga, 
  E.Status, 
  E.Datum_Promene
FROM 
  Evidencija         AS E
JOIN  Korisnik      AS K     ON E.ID_korisnik=K.ID_korisnik 
JOIN   Tip_usluge AS T     ON T.Usluga_ID = E.UslugaID
WHERE K.korisnik = [Naziv Korisnika];


Ovo je SQL sintaksa, Access je verovatno ne bi prihvatio, ali u Accesu imas lep prozor za graficko pravljenje povezivanje tabela, pa probaj tamo. Jednostavno povezes kolone koje treba povezati i Access ce napisati JOIN za tebe. Kad visi rezultat, videces da li ti treba GROUP BY ili ne. GROUP BY obicno je pracen nekakvim brojanjem ili sumiranjem, sto ne izgleda da ti je cilj, ne vidim nikakvu kolicinu u SELECT listi.

Probaj

:-)
 
Odgovor na temu

[es] :: Baze podataka :: Problem sa GROUP BY

[ Pregleda: 3631 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.