[ 1900-ti @ 22.05.2008. 14:26 ] @
Cao, Pitanje je sledece, imam tabelu i u njoj polje JMBG, kako da napisem upit i da pronadjem one maticne brojeve koji se ponavljaju.... Hvala |
[ 1900-ti @ 22.05.2008. 14:26 ] @
[ goranvuc @ 22.05.2008. 14:45 ] @
Code: SELECT JMBG, (Count(*) - 1) AS BrojDuplih FROM TvojaTabela GROUP BY JMBG HAVING Count(*) > 1 [ 1900-ti @ 22.05.2008. 15:40 ] @
Hvala goranvuc, ali mozda nisam dobro definisao, ja kada uradim upit koji si mi napisao dobijem samo broj duplih, to sam uradio sa distinct jmbg, ali voelo bih da vidim spisak koji su to maticni brojevi da bih mogao da ih obrisem, unapred hvala
[ Getsbi @ 22.05.2008. 15:55 ] @
Imaš u Access-u Find Duplicates query.
[ goranvuc @ 22.05.2008. 16:35 ] @
Citat: 1900-ti: Hvala goranvuc, ali mozda nisam dobro definisao, ja kada uradim upit koji si mi napisao dobijem samo broj duplih, to sam uradio sa distinct jmbg, ali voelo bih da vidim spisak koji su to maticni brojevi da bih mogao da ih obrisem, unapred hvala Pa dobio si spisak JMBG-ova koji imaju vise od jedne pojave - ne razumem sta je problem. Ako hoces SQL koji ti brise sve duplikate, a ostavlja samo jednu pojavu onda moras da preciziras koje redove ostavljas, tj. koji ti je kriterijum brisanja (Ako imas 3 ista, brises 2 a ostavljas 1; nagradno pitanje je: koji ostaje?) P.S. Getsbi, nemoj da se ljutis, ali mislim da bi trebalo forsirati resenja koja se baziraju na SQL-u, a ne na resenja koja nudi Access Framework, tj. njeovi plug-inovi i wizardi - to je moje skromno misljenje. [ Getsbi @ 22.05.2008. 18:52 ] @
Ne ljutim se. Ali mislim da ako uradi SQL upit iz Query Designera ili pomoću Wizarda i zadovoljan je rezultatom, može da isčita SQL sintaksu putem SQL View i da nešto nauči. Naravno ako ga interesuje. To da li će mo recimo da forsiramo Lookup Wizarde za povezivanje tabela ili direktno povezivanje u prozoru Relationships, QBE okno za querije ili pisanje u već pomenutom SQL View prozoru............. i da ne nabrajam više, je manje važno. Za Access je bitno da sve to koristi da bi ostao SUBP i alatka za brzi razvoj aplikacija. Ostalo su afiniteti. Dakle ne ljutim se.
![]() [ Zidar @ 22.05.2008. 20:46 ] @
Lepo je insistirati na SQL resenjima. Medjutim, Access ima odvratan SQL prozor i uopste ne krivim nikoga sto ne pise kod direktno
![]() Ko se ipak odluci da pise kod u SQL prozoru direktno, evo male pomoci: http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl Dati sajt nudi besplatan SQL formatter koji radi i sa Access kverijima. Tako, kad napravite pomocu grafickog wizarda kveri u Accessu, otvorite SQL prozor, Ctrl C ceo izraz (koji grozno izgleda) pa ga onda Ctrl P u formatter, kliknete Format SQL dugme i u donjem prozoru donbijete lepo formatiran izraz, koji onda cak mozete i da razumete. Accessov graficki kveri dizajner je toliko dobar (mnogo bolji nego onaj sto nudi MS SQL u bilo kojoj verziji) da ja licno u Accesu retko kada kucam SQL (samo za nebulozne kverije). A kad predjem u MS SQL okruzenje, ni puskom me ne bi naterali da koristim graficki alat. Zvuci uvrnuto, ali je tako. Primer - originalni SQL izkaz u Access SQL prozoru: Code: SELECT dbo_vwSDC_BoardUpload_Contacts.OrderNumber, dbo_vwSDC_BoardUpload_Contacts.ProjectID, dbo_vwSDC_BoardUpload_Contacts.Lang, dbo_vwSDC_BoardUpload_Contacts.BrdMident, dbo_vwSDC_BoardUpload_Contacts.BrdName, dbo_vwSDC_BoardUpload_Contacts.FirstSubmission, dbo_vwSDC_BoardUpload_Contacts.LastSubmission, dbo_vwSDC_BoardUpload_Contacts.Successful, dbo_vwSDC_BoardUpload_Contacts.Pending, dbo_vwSDC_BoardUpload_Contacts.Unsuccessful, dbo_vwSDC_BoardUpload_Contacts.TotalFiles, dbo_vwSDC_BoardUpload_Contacts.StudentCnt, dbo_vwSDC_BoardUpload_Contacts.SchoolCnt, dbo_vwSDC_BoardUpload_Contacts.StudentsLastYear, dbo_vwSDC_BoardUpload_Contacts.SchoolsLastYear, dbo_vwSDC_BoardUpload_Contacts.DifStudents, dbo_vwSDC_BoardUpload_Contacts.DiffStudentsPCT, dbo_vwSDC_BoardUpload_Contacts.FailedBoards, dbo_vwSDC_BoardUpload_Contacts.ConditionalPass, dbo_vwSDC_BoardUpload_Contacts.BoardsInContact, dbo_vwSDC_BoardUpload_Contacts.ReportDate FROM dbo_vwSDC_BoardUpload_Contacts INNER JOIN tblCurrentProject ON dbo_vwSDC_BoardUpload_Contacts.ProjectID = tblCurrentProject.ProjectID ORDER BY dbo_vwSDC_BoardUpload_Contacts.OrderNumber; To samo neprijatelju mozemo d apozelimo da procita i snadje se ![]() Ctrl C, pa ctrrl P i klik na dugme Format SQl daje ovio: Code: * Powered by General SQL Parser (www.sqlparser.com) */ SELECT dbo_vwSDC_BoardUpload_Contacts.OrderNumber, dbo_vwSDC_BoardUpload_Contacts.ProjectID, dbo_vwSDC_BoardUpload_Contacts.Lang, dbo_vwSDC_BoardUpload_Contacts.BrdMident, dbo_vwSDC_BoardUpload_Contacts.BrdName, dbo_vwSDC_BoardUpload_Contacts.FirstSubmission, dbo_vwSDC_BoardUpload_Contacts.LastSubmission, dbo_vwSDC_BoardUpload_Contacts.Successful, dbo_vwSDC_BoardUpload_Contacts.Pending, dbo_vwSDC_BoardUpload_Contacts.Unsuccessful, dbo_vwSDC_BoardUpload_Contacts.TotalFiles, dbo_vwSDC_BoardUpload_Contacts.StudentCnt, dbo_vwSDC_BoardUpload_Contacts.SchoolCnt, dbo_vwSDC_BoardUpload_Contacts.StudentsLastYear, dbo_vwSDC_BoardUpload_Contacts.SchoolsLastYear, dbo_vwSDC_BoardUpload_Contacts.DifStudents, dbo_vwSDC_BoardUpload_Contacts.DiffStudentsPCT, dbo_vwSDC_BoardUpload_Contacts.FailedBoards, dbo_vwSDC_BoardUpload_Contacts.ConditionalPass, dbo_vwSDC_BoardUpload_Contacts.BoardsInContact, dbo_vwSDC_BoardUpload_Contacts.ReportDate FROM dbo_vwSDC_BoardUpload_Contacts INNER JOIN tblCurrentProject ON dbo_vwSDC_BoardUpload_Contacts.ProjectID = tblCurrentProject.ProjectID ORDER BY dbo_vwSDC_BoardUpload_Contacts.OrderNumber; Razlika je ocigledna ![]() [ goranvuc @ 22.05.2008. 21:16 ] @
A ja jos nisam dobio odgovor na nagradno pitanje
![]() [ Getsbi @ 22.05.2008. 21:16 ] @
Dodao sam link u Top temu "Korisni linkovi" Zbilja zaslužuje.
![]() P.S. @ goranvuc Šta je nagrada? [ domaci_a_nas @ 23.05.2008. 00:26 ] @
Citat: Ako imas 3 ista, brises 2 a ostavljas 1; nagradno pitanje je: koji ostaje?) ![]() ![]() [ Leruman @ 23.05.2008. 08:04 ] @
Lako je dobiti duple maticen brojeve, pitanje je kako da znas koji da obrises.
Da li imas jos neki kriteriijum za razlikovanje unosa u tabelu. Stavi format cele tabele iz koje treba da brises podatke, tek onda mozemo da ti pomognemo. Stavi jos i format i ključeve tabela koje su vezane za tu tabelu, posebo ako je veza preko JMBG [ goranvuc @ 23.05.2008. 08:13 ] @
Citat: Getsbi: P.S. @ goranvuc Šta je nagrada? Nagradno pitanje je bilo upućeno postavljaču topika, a nagrada bi bila rešenje njegovog problema ![]() [ Zidar @ 23.05.2008. 14:08 ] @
Od ovoga je sve pocelo:
Citat: Pitanje je sledece, imam tabelu i u njoj polje JMBG, kako da napisem upit i da pronadjem one maticne brojeve koji se ponavljaju.... Ja to tumacim ovako: pokazi mi kompleten rekorde (JMBG, ime, prezime, datum rodjenja...) gde JMBG nije jedinstven (ja bih doao i JMBG IS NOT NULL, da bude manje guzve) Goran je dao kveri koji lista sve JMBG koji se pojavljuju vise od jednom u tabeli. To je OK, ali je samo polovina posla. Coveku treba verovatno nesto ovako: Code: SELECT * FROM TVOJATABELA WHERE JMBG IN (SELECT JMBG FROM TVOJATABELA GROUP BY JMBG HAVING COUNT(* ) > 1) ORDER BY JMBG SELECT u subkveriju je Goranov kveri, sa minimalnom modifikacijom - izbacena kolona koja pokazuje BrojKopija. Iance IN ne bi moglo da radi i trebao bi nam JOIN pa bi kveri mozda bio manje razumljiv. Postavljac pitanja je mogao da dobije isti rezultat koriscenejm Access 'Find Duplicates' wizarda. A kako ukloniti duplikate? Pogledaj ih, pa odluci. Nije uvek lako odluciti. Mozda je najboljilek da se prvo uklone duplikati, pa onda u tabeli stavi UNIQUE index na kolonu JMBG. Naravno, ako TvojaTabela nije nesto sto si recimo dobio od nekoga, pa sad cistis podatke pre nego ih prebacis u pravu tabelu, koja naravno ne dozvoljava da se unesu duplikati. Dodavanje Autonumber nije resenje. Moje ime i moj JMBG moze na taj nacin da se unese deset puta, i da ni jedan rekord ne bude potpuni duplikat - jer ce imati razlicite Autonumber vrednosti. ![]() [ domaci_a_nas @ 23.05.2008. 17:56 ] @
Osećam se prozvanim između redova
![]() ![]() Ko razume shvatiće ![]() [ goranvuc @ 23.05.2008. 18:20 ] @
Mislim da ti nisi nas razumeo: Mozes ti obrisati duple redove iz tabele bez obzira da li ima surogat kljuc (taj tvoj autonumber) ili ne, moje nagradno pitanje se odnosilo na kriterijum sta ostaje, a sta se brise i @Zidar je lepo sve dodatno pojasnio, ali umesto da se javi pokretac teme i kaze nam sta ce da brise ako ima ovakve podatke npr:
JMBG IME PREZIME 2511970455988 Goran Vucicevic 2511970455988 GORAN VUCICEVIC 2511970455988 GORAN VUČIĆEVIĆ 2511970455988 Goran Vucicevic javljas se ti i osecas se prozvanim ![]() [ domaci_a_nas @ 23.05.2008. 23:48 ] @
Ja sam jedini koji je pominjao AutoNumber kao rešenje koje je poštovani kolega Zidar okarakterisao ;
Citat: Dodavanje Autonumber nije resenje Naravno, pravljenje nove tabele sa unique indexom na JMBG kao što kaže Zidar je bez sumnje najbolje i najpraktičnije rešenje. [ Getsbi @ 24.05.2008. 08:56 ] @
Evo ovde je rešenje:
http://www.praktikum.co.yu/office/access/acc_130.asp#acc_130a [ domaci_a_nas @ 24.05.2008. 15:26 ] @
Kao što se iz primera vidi, ovde je ključ rešenja polje IDUnos, dakle Autonumber polje, sa razlikom što umesto mog primera sa First koristi Min, ali to mu dođe isto
[ vstefanovicc @ 02.09.2009. 19:17 ] @
Imam jedno dodatno pitanje, kako da u tabelu unesem maticni broj (Primary key se nalazi na polju Prezime i ime - ovo mi je bitno jer je vezano za query i formu), a da ne postoji mogucnost duplikata, to jest da je polje indexovano. (takodje molim VB kod za poruku "JMBG vec postoji...")
[ Getsbi @ 02.09.2009. 20:50 ] @
Indeksiraš ga sa Yes (No Duplicates). Access neće dozvoliti unos duplog. Ako baš nećeš da te access upozorava već da imaš sopstveni kod, onda pogledaj ovde http://www.elitesecurity.org/t245822-0#1482976 sam ostavio VBA kod za proveru dupliranja podataka po unosu. Ti ga prilagodi.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|