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

Filtriranje podataka prema broju kolona u kojima vrednost nije NULL

[es] :: Access :: Filtriranje podataka prema broju kolona u kojima vrednost nije NULL

[ Pregleda: 17134 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sixstringer
Beograd

Član broj: 69795
Poruke: 35
*.urbel.com.



+4 Profil

icon Filtriranje podataka prema broju kolona u kojima vrednost nije NULL22.09.2010. u 10:05 - pre 164 meseci
Hello!
Ne mogu da nađem rešenje za naizgled jednostavan problem... Imam tabelu sa kolonama POLIGON, POVRŠINA_TIP_1, POVRŠINA_TIP_2, POVRŠINA_TIP_3 do POVRŠINA_TIP_n. U nekim poligonima nije zastupljena ni jedna vrsta površina, a u nekima može biti i više vrsta. Pokušavam da nađem odgovor na pitanje: koji poligoni imaju vrednost za više od dva tipa površina? Ili - koji poligoni imaju upisane vrednosti za više od 50% tipova površina? Ili da grupišem poligone prema broju tipova površina koje su zastupljene...

Nije problem kada imam ukupno 5 vrsta površina pa postavljam za svaki tip uslov where POVRŠINA_TIP_x is null, ali kako ovo raditi sa npr 50 vrsta površina? Postoji li neko generičko rešenje?
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
...148.91.adsl.dyn.beotel.net.

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Filtriranje podataka prema broju kolona u kojima vrednost nije NULL22.09.2010. u 12:27 - pre 164 meseci
Nakacite primer da ga pogledamo, lakse ce Vam se pomoci
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Filtriranje podataka prema broju kolona u kojima vrednost nije NULL22.09.2010. u 14:09 - pre 164 meseci
Problem je u tome sto je tabela lose projektovana. Treba je razbiti na dve. Kolne koje si nazvao POVRŠINA_TIP_1, POVRŠINA_TIP_2, POVRŠINA_TIP_3 do POVRŠINA_TIP_n treba da idu u posebnu tabelu. Onda se zadatak resava pisanjem kverija tipa 'relaciono deljenje'.

Ako tabelu nije moguce razbiti na dve iz politickih razloga, treba napisati kveri koji 'normalizuje' tabelu, i zatim na taj kveri primeniti relaciono deljenje.

Sve ostalo je gubljenje vremena.

 
Odgovor na temu

sixstringer
Beograd

Član broj: 69795
Poruke: 35
*.urbel.com.



+4 Profil

icon Re: Filtriranje podataka prema broju kolona u kojima vrednost nije NULL22.09.2010. u 15:35 - pre 164 meseci
Citat:
Zidar: Problem je u tome sto je tabela lose projektovana. Treba je razbiti na dve. Kolne koje si nazvao POVRŠINA_TIP_1, POVRŠINA_TIP_2, POVRŠINA_TIP_3 do POVRŠINA_TIP_n treba da idu u posebnu tabelu. Onda se zadatak resava pisanjem kverija tipa 'relaciono deljenje'.

Ako tabelu nije moguce razbiti na dve iz politickih razloga, treba napisati kveri koji 'normalizuje' tabelu, i zatim na taj kveri primeniti relaciono deljenje.

Sve ostalo je gubljenje vremena.

:-)


Da li bi mogao detaljnije da objasniš to o deljenje ili normalizaciju? Tabela koju sam opisao je zapravo jedini format koji mogu da koristim u jednoj analizi i oči su mi pobelele dok nisam uspeo da dobijem podatke u tom formatu. Nije problem i da opet pretabavam podatke, samo ne znam u kom pravcu da razmišljam. Nisam razumeo šta znači kveri tipa relaciono deljenje (poznajem osnovu baza podataka ali nisam po struci IT pa ne baratam podrazumevanim pojmovima). Shvatam na koji način si mislio da se podele podaci na dve tabele, ali ne shvatam kako to menja stvari...


Ovo je počelo kao konkretni problem vezan za konkretnu situaciju ali sam shvatio da može da bude template problem pa mi je zanimljivo dad vidim kako se rešava ova situacija.

@Zoran.Eremija
Ne mogu trenutno da kačim tabelu, okačiću za par sati.

Hvala vam na pomoći, ljudi!
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
...148.91.adsl.dyn.beotel.net.

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Filtriranje podataka prema broju kolona u kojima vrednost nije NULL22.09.2010. u 17:00 - pre 164 meseci
Ajde dok ne dodje primer da razmotrimo sta je Vas problem.

Iz Vaseg prvog posta se moze zakljuciti da imate jednu tabelu koja ima sledecu strukturu


Ako je to tako u Vasem opisu se moze konstatovati sledece:

Prvo kada se zeli opisati neki realni problem treba da se identifikuju objekti od intresa posmatranja (ENTITETI).

Iz Vaseg opisa i zelje za dobijanjem nekih informacija uocava se da nisu tacno i dobro identifikovani entiteti.
Cim to nije uradjeno nisu uocene ni veze koje postoje.

Ako sam dobro razumeo izlozen Vas problem moze se zakljuciti da postoje 2 dominantna entiteta koji su u vezi i jos ta veza ima svoj opis koji se moze videti na sledecoj slici



Ako sam dobro razumeo pored gore navedenog principa identifikacije entiteta naruseno je pravilo 1NF (prva normalna forma), na koju je ukazao kolega @Zidar.


[Ovu poruku je menjao Zoran.Eremija dana 22.09.2010. u 18:13 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Filtriranje podataka prema broju kolona u kojima vrednost nije NULL22.09.2010. u 21:16 - pre 164 meseci
Citat:
Da li bi mogao detaljnije da objasniš to o deljenje ili normalizaciju? Tabela koju sam opisao je zapravo jedini format koji mogu da koristim u jednoj analizi i oči su mi pobelele dok nisam uspeo da dobijem podatke u tom formatu. Nije problem i da opet pretabavam podatke, samo ne znam u kom pravcu da razmišljam. Nisam razumeo šta znači kveri tipa relaciono deljenje (poznajem osnovu baza podataka ali nisam po struci IT pa ne baratam podrazumevanim pojmovima). Shvatam na koji način si mislio da se podele podaci na dve tabele, ali ne shvatam kako to menja stvari...


Ovo je počelo kao konkretni problem vezan za konkretnu situaciju ali sam shvatio da može da bude template problem pa mi je zanimljivo dad vidim kako se rešava ova situacija.


Zoran je objasnio ukratko sta je problem. Radi se o tome da tvoju tabelu koja ima mnogo kolona slicne namene razbijes na najmanje dve tabele. Ovo da bi imao maksimalnu fleksibilnost u skladistenju podataka i da bi mogao da odgovaras na pitanaj tipa "koji poligoni imaju vrednost za više od dva tipa površina?".

Tvoja tabela izgleda neako ovako:
Code:
Poligon    PovTip_1    PovTip_2    PovTip_3    PovTip_4    PovTip_5    PovTip_6
Poligon 1    Y            Y                
Poligon 2                Y            Y        
Poligon 3                            Y            Y            Y    

Ima mnogo praznih celija. Mozda u tvom slucaju pisu nule i jedinice, Y/N ili su naprosto neke celije prazne. Teorijski, nema ogranicenja za broj kolona PovTip_i, pa se psotavlja pitanje koliko ti kolona treba. Sto vise, to bolje. Medjutim, veoma je tesko dobiti odgovore koji ti trebaju.

Procesom normalizacije, u tvom slucaju dobio bi dve tabele, ovako:
Code:
Tabela Poligoni:

Poligon
--------
Poligon 1
Poligon 2
Poligon 3

Tabela PridruzenePovrsine (povrsine pridruzene poligonima) (ovo je kod Zorana PoligonTipPovrsine, i ne treba ti Vrednost, barem za sada):

Poligon       TipPovrsine
--------------------------
Poligon 1        PovTip_1
Poligon 1        PovTip_2
Poligon 2        PovTip_2
Poligon 2        PovTip_4
Poligon 3        PovTip_2
Poligon 3        PovTip_3
Poligon 3        PovTip_5

U tabeli PridruzenePovrsine svaki poligon izlistan je tacno onoliko puta koliko ima pridruzenih povrsina. Mnogo je kompaktnije i preglednije.

Sad mozes da izvrsis ovakav kveri:
Code:

SELECT Poligon, COUNT(*)
FROM PridruzenePovrsine 
GROUP BY Poligon
koji ce ti pokazati koliko povrsina je pridruzeno kom poligonu. Ako te zanimaju procenti, mozes da vidis koliko ukupno povrsina je u igri pomocu ovog kverija
Code:
 SELECT DISTINCT TipPovrsine 
FROM PridruzenePovrsine 

Mozes i da kombinujes dva kverija pa da dobijes procenat, da vidis koji poligoni imaju vise od 50% mogucih tipova povrsina:
Code:
SELECT 
    Poligon
    , COUNT(*) AS BrojPovrsina
    , COUNT(*)/(SELECT COUNT(*) 
                FROM (SELECT DISTINCT TipPovrsine 
                        FROM PridruzenePovrsine )
                ) AS Procenat
FROM PridruzenePovrsine 
GROUP BY Poligon

Pazi, ja ovo pisem napamet, nisi nam okacio bazu s podacima pa ne mogu da koristim prave podatke.

Ako podatke dobijas u obliku u kome ih dobijas, sa mnogo kolona i jednim redom po poligonu, nije smak sveta. Mozes da ih ivezes u Excel ili Access pa da nekom transpozicijom ih prevedes na oblik koji ti treba.

U Accessu mozes da izvrsiai ovakav kveri, da bi se podaci lepo poredjali, kao u tabeli PridruzenePovrsine :
Code:

SELECT Poligoni.Poligon, 'PovTip_1' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_1)="Y"))
UNION
SELECT Poligoni.Poligon, 'PovTip_2' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_2)="Y"))
UNION
SELECT Poligoni.Poligon, 'PovTip_3' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_3)="Y"))
UNION
SELECT Poligoni.Poligon, 'PovTip_4' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_4)="Y"))
UNION
SELECT Poligoni.Poligon, 'PovTip_5' AS TipPovrsine
FROM Poligoni
WHERE (((Poligoni.PovTip_5)="Y"))


Gde je relaciono deljenje? Na srecu, nije nam trebalo. Trebalo bi nam za pitanje tipa 'Kojim poligonima su pridruzene povrsine PovTip_1 i PovTip_3 (mogu biti i neki drugi, nas interesuju ove dve)', ili ''Kojim poligonima su pridruzene povrsine PovTip_1 i PovTip_3, ali samo te dve, ni jedna druga' ili 'Koji poligon ima pridruzene sve tipove povrsina koji se javljaju'.

Kad savladas osnove (GROUP BY, UNION, kveri unutar kverija), onda mozemo da pricamo o relacionom deljenju, nikako pre toga. Kao matematika, ako ne znas razlomke i rastavljanje na faktore ne vredi da pricamo o limesima i izvodima.

:-)


 
Odgovor na temu

sixstringer
Beograd

Član broj: 69795
Poruke: 35
*.urbel.com.



+4 Profil

icon Re: Filtriranje podataka prema broju kolona u kojima vrednost nije NULL27.09.2010. u 10:30 - pre 164 meseci
Izvinjavam se što se nisam ranije javio, bio sam sprečen.

Tek kada sam pročitao vaše odgovore sam shvatio kakvu sam suštinsku grešku napravio! Lupio sam se po čelu tako da se čulo do Resnika! :) Eto, ja sam savršen primer da teorija ne znači ništa bez prakse! Naime, pre dve godine sam na fakultetu (Geografski fakultet u Beogradu) prošao Oracle obuku - database design i database programming i uspešan završetak ovog kursa mi je dao mogućnost da polažem ispit (test, kako god) za Oracle Certified Professional sertifikat (nadam se da ću uskoro i to uraditi). Ipak, nisam se neko vreme aktivno bavio bazama i sada sam se prvi put susreo sa Access-om.

Sve što ste ovde objasnili shvatam, ali mi je došlo do mozga tek kada sam dobrano obnovio teoriju koju sam, eto, već učio i usvojio. Nekog ozbiljnijeg iskustva sa realnim problemima nisam imao i ovo mi je dobra škola. Još uvek ne mogu da verujem da mi se nije upalila lampica i da nisam prepoznao tako očigledno narušavanje prve normalne forme! I rešenje problema... Intersection tabela! Pa naravno! A najgore je to što su mi ulazni podaci došli baš u obliku intersection tabele a ja to uopšte nisam prepoznao jer sam se fokusirao na to da podatke pretumbam u navedeni oblik jer sam samo tako mogao da ih grafički predstavim (u pitanju je GIS alat). Eh, ovaj problem mi je fantastična škola i upozorenje da prvo dobro razmislim i posmatram stvari iz nekoliko uglova pre nego što počnem da srljam u jednom pravcu... :)

Postaviću tabelu iako je problem rešen za slučaj da zatrebaju nekom drugom.

@Zoran.Eremija, @Zidar
Hvala vam na ovako iscrpnom objašnjenju. Mnogo znači kada postoje ljudi koji su radi ne samo da pomognu nego i da to urade na ovakav način.

E, da, malo mi je glupo da vas dalje davim, ali željan sam da naučim... Možda je to stvar terminologije jer nisam mnogo stvari učio van te Oracle obuke, ali nikako ne razumem šta znači "relaciono deljenje". Pokušao sam da nađem kveri za rešavanje pitanja koje je Zidar naveo u prethodnom postu ali nisam uspeo. Opet mi mozak radi linearno...
 
Odgovor na temu

[es] :: Access :: Filtriranje podataka prema broju kolona u kojima vrednost nije NULL

[ Pregleda: 17134 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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