» »

Problem v Accessu

Problem v Accessu

poweroff ::

Imam neko mdb bazo, kjer sta dve tabeli: stranke in nakupi.

V bazi strank so podatki o strankah, v bazi nakupi pa eden ali več nakupov posamezne stranke.

Če rečem takole:

SELECT [stranke].Indeks, [stranke].Priimek, [stranke].Ime, [stranke].Naslov, [nakupi].Artikel
FROM stranke, nakupi
WHERE [nakupi].IndeksOsebe=[stranke].Indeks;

Dobim seznam vseh kupcev in njihovih nakupov, vendar tako, da če je kupec kupil dva artikla, dobim dve vrstici, recimo:
1; Novak; Janez; Ljubljanska 1; trdi disk
1; Novak; Janez; Ljubljanska 1; monitor

Jaz pa bi rad tak izpis, kjer bo vsaka stranka v eni sami vrstici, artikli pa bodo navedeni na koncu v stolpcih (recimo, da vem, da je vsak kupil največ 5 artiklov):
1; Novak; Janez; Ljubljanska 1; trdi disk; monitor; ; ; ;

Kako oblikovat iskalni query?
sudo poweroff

zavajon ::

poweroff ::

Hmm, problem je, da Accessa ne znam uporabljati čisto nič. Ko pa podatke izvozim v txt bazo, jih pa potem z nekih drugim softwerom obdelam.

Tako da ne štekam povsem kaj moram narediti. Če prav razumem, je treba najprej narediti TRANSFORM. Vendar pa jaz ne rabim skupne vsote ali povprečja, pač pa fiksne podatke (imena izdelkov).
sudo poweroff

rognaj ::

Če je samo 5 nakupov, potem:

SELECT stranke.Indeks, stranke.Priimek, stranke.Ime, stranke.Naslov,
(select top 1 nakupi.artikel from nakupi where stranke.[Indeks] = nakupi.[NakupiOsebe] ORDER BY nakupi.Artikel) as PRVI,
(SELECT top 1 Nakupi.Artikel from Nakupi WHERE stranke.[Indeks] = nakupi.[NakupiOsebe] and Nakupi.Artikel NOT IN ( SELECT TOP 1 N.Artikel FROM Nakupi N WHERE stranke.[Indeks] = N.[NakupiOsebe] ORDER BY N.Artikel)) AS DRUGI,
(SELECT top 1 Nakupi.Artikel from Nakupi WHERE stranke.[Indeks] = nakupi.[NakupiOsebe] and Nakupi.Artikel NOT IN ( SELECT TOP 2 N.Artikel FROM Nakupi N WHERE stranke.[Indeks] = N.[NakupiOsebe] ORDER BY N.Artikel)) AS TRETJI,
(SELECT top 1 Nakupi.Artikel from Nakupi WHERE stranke.[Indeks] = nakupi.[NakupiOsebe] and Nakupi.Artikel NOT IN ( SELECT TOP 3 N.Artikel FROM Nakupi N WHERE stranke.[Indeks] = N.[NakupiOsebe] ORDER BY N.Artikel)) AS CETRTI,
(SELECT top 1 Nakupi.Artikel from Nakupi WHERE stranke.[Indeks] = nakupi.[NakupiOsebe] and Nakupi.Artikel NOT IN ( SELECT TOP 4 N.Artikel FROM Nakupi N WHERE stranke.[Indeks] = N.[NakupiOsebe] ORDER BY N.Artikel)) AS PETI
FROM stranke;

Če dodamo poleg Novak Janeza še "Ima Vse", ki ima 5 nakupov, potem dobiš:
Indeks Priimek Ime Naslov PRVI DRUGI TRETJI CETRTI PETI
1 Novak Janez Ljubljanska 1 Monitor Trdi disk
2 Ima Vse Testna 1 Prvi 2 Drugi 3 Tretji 4 Cetrti 5 Peti

Je pa v osnovi problem, da tabeli, ki sta povezani 1:n težko spraviš v eno vrstico (razen če imaš znan "n" in je ta "relativno" majhen). Lahko nastopijo problemi pri nakupu istih artiklov, zato je za razmisliti, če bi izvažal obe tabeli in jih nato obdelal v "drugem" programu.

poweroff ::

Hmm od kje si dobil nakupi.[NakupiOsebe] ???
sudo poweroff

rognaj ::

Ups, napaka, ko sem delal bazo za primer. Mora biti IndeksOsebe.

poweroff ::

Hmm, ampak tudi to mi vrže napako...
sudo poweroff

rognaj ::

Kakšno? Ali si povsod zamenjal (9x)?

poweroff ::

Eh, nekaj sem se zatipka. Sedaj pa deluje.

Super, hvala.

Kot vidiš, o Accessu nimam pojma, mi je pa malce pomagalo, da poznam vsaj osnove programiranja. Hvala še enkrat.
sudo poweroff


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Načrtovanje in omplementacija podatkovnih baz(pomoč)

Oddelek: Programiranje
6810 (590) mihies
»

[SQL] PgAdmin preprosto vprasanje povezano s stolpci v tabeli

Oddelek: Programiranje
222109 (1468) Cvele2011
»

[Oracle] Osnovno povpraševanje problem

Oddelek: Programiranje
151790 (1431) zdravc
»

MSSQL row lock

Oddelek: Programiranje
91522 (1410) inferno666
»

(Access) query po datumu

Oddelek: Programiranje
211865 (1440) imagodei

Več podobnih tem