- One mobilszolgáltatások
- Apple iPhone 16 Pro - rutinvizsga
- Samsung Galaxy S21 FE 5G - utóirat
- Motorola Edge 50 Ultra - szépen kifaragták
- Samsung Galaxy A56 - megbízható középszerűség
- Motorola Edge 30 Neo - wake up, Jr...
- Samsung Galaxy S23 Ultra - non plus ultra
- Mobil flották
- iPhone topik
- Google Pixel topik
Aktív témák
-
lapa
veterán
üdv. nem értek az sql-hez, de meg kell oldanom valami és nem jutok előbbre. igyekszem érthetően leírni miről van szó.
van egy tábla megbízásokkal (ssdg_sendung). minden megbízáshoz tartozhat egy vagy több számlarekord (slaf_leistanf). szeretném az összes megbízás adatait megjeleníteni, valamint a megbízások számlarekordjaiból azok bizonyos mezői szerint csoportosított összegeket. tehát pl.
megbízás---számla kimenő nyitott---számla kimenő lezárt---számla bejövő nyitott---....
blabla---------2---------------------------------1--------------------------------0----------------------------
a mostani lekérdezés tele van pluszjelekkel (ez outer join?), a számlarekordok csoportosításánál külön nevek (trzu, trzuok...) vannak. a selectben próbáltam decode-ot, sum-ot meg nvl-t de nem jön össze mert vagy rossz összeget ad ki, vagy nem jeleníti meg az olyan sorokat, ahol valamilyen számlasor hiányzik. a lekérdezés jelenleg:
SELECT
abs.sda_sdgid,
abs.adr_adrid,
abs.adr_name1, abs.adr_str, abs.adr_ort, abs.adr_plz, abs.adr_staid,
count(trzu.laf_lafid),
count(trzuok.laf_lafid),
count(trab.laf_lafid),
count(trabok.laf_lafid)
FROM
ssdg_sendung,
ssda_sdgadr abs, sadr_adresse abs,
slaf_leistanf trzu,
slaf_leistanf trzuok,
slaf_leistanf trab,
slaf_leistanf trabok
WHERE
abs.adr_adrid(+) = abs.sda_adrid AND sdg_sdgid = abs.sda_sdgid(+) AND abs.sda_satid(+) = 'SU' AND
trzu.laf_sdgid(+) = sdg_sdgid and trzu.laf_latid(+) = 'TR' and trzu.laf_lauid(+) = 'ZU' and trzu.laf_lasid(+) = '200' and
trzuok.laf_sdgid(+) = sdg_sdgid and trzuok.laf_latid(+) = 'TR' and trzuok.laf_lauid(+) = 'ZU' and trzuok.laf_lasid(+) = '420' and
trab.laf_sdgid(+) = sdg_sdgid and trab.laf_latid(+) = 'TR' and trab.laf_lauid(+) = 'AB' and trab.laf_lasid(+) = '200' and
trabok.laf_sdgid(+) = sdg_sdgid and trabok.laf_latid(+) = 'TR' and trabok.laf_lauid(+) = 'AB' and trabok.laf_lasid(+) = '420'
GROUP BY
itt minden mező újra, mert csak így engedte a count-ot a SELECT-ben.
szóval a fenti műx, csak a count-ok rossz eredményt hoznak. ha bárhonnan elveszem a (+)-ot, akkor meg csak olyan megbízásokat listáz, amiben minden számlatípusból van. van valakinek ötlete hogyan tudnám megcsinálni? köszönöm.
[Szerkesztve] -
Gh0sT
addikt
Panther, segíts!
[link] -
Panther
HÁZIGAZDA
Az, hogy:
Ugyfel.Ugyfel_nev LIKE @Ugyfelnev + '%'
azért nem működik, mert SQL-ben nem a + az egymás-után-írás operátora. Hogy neked konkrétan mi, ahhoz tudni kéne hogy milyen SQL-el dolgozol. PostgreSQL-ben pl ez: || MySQL-ben pedig a CONCAT parancs.
A gond ezzel ott van, hogy ha pl van olyan település, hogy Buda, meg olyan hogy Budapest, akkor a Buda%-ra ki fogja dobni mindkettőt (mert az egyik a folytatása a másiknak).
Épp ezért, ha csak előre megszabott lehetőségek közül válaszhat a user (ergo nincs effektíve a user kénye-kedve szerinti keresés), akkor érdemes nem mindig %-ot tenni mindenhova. Az kéne, hogy ha valamit kiválasztott, akkor azt odaírni, ha semmit nem választott ki, akkor meg %. (Vagy, mint írtam, a WHERE-ből egyszerűen kihagyni a nevezett feltételt. Persze ez nem olyan egyszerű mint a másik megoldás.)
Javaslom én is hogy a Comboboxot magad töltsd fel, és az első (nulladik) elembe tedd be hogy ''Összes'' -- majd ha Combobox.Change() van, akkor ha listindex=0 akkor Telepules LIKE '%', különben meg Telepules LIKE 'amit_kivalasztott'. -
Gh0sT
addikt
Hát igen, ezt szerettem volna elkerülni. Még azon gondolkodtam, hogy csinálok egy queryt, ami egy külön táblába kinyeri a települések adatait. Majd új rekordként felviszem még mellé ''Összes'' rovatot, aminek nem lesz semmiféle jelentése, egyszerűen csak azért kell, hogy látszódjon a listában. Ezután egy feltétellel megvizsgálnám a Combobox.Text tulajdonságát, és ha ''Összesen'' szerepel benne, akkor simán csak %-kal paraméterezném a tárolt eljárást.
-
Goose-T
veterán
Nem vagyok biztos benne, hogy lehetséges. Azt tudom elképzelni, hogy nem rendeled semmilyen adatforráshoz, hanem írsz egy kis kódot, ami egyenként áttölti a sorokat a combobox-ba az adatbázisból, ilyenkor utólag is hozzá lehet adni bármit. Nem tudom, hogy a VS2005-ben hogy van, az tuti, hogy VS98-ban csak így lehetett megcsinálni (ha az emlékeim nem csalnak a tavalyi VB.NET tréningről, akkor ebben is csak így lehet).
-
Goose-T
veterán
Ha így működik, akkor így működik és kész. A combobox-os problémádra pedig esetleg a FindString metódus lehet a megoldás: [link]. Olyat tudok elképzelni, hogy a combobox KeyDown event-jére triggerelsz egy FindFirst metódust, majd a visszakapott sorszámra lépteted a SelectedIndex (v. SelectedItem) property segítségével. Ha nem ad vissza semmit a FindFirst, akkor kitörlöd a beírt szöveg utolsó karakterét.
-
Gh0sT
addikt
Közben még egy dolog eszembe jutott. Igaz, hogy VB, de ha már erre jársz...
Felrögzítettem egy adatbázisba az összes települést, amit meg is tudok jeleníteni egy Combobox-ban és tudok belőle választani. A comboboxnak van valami Dropdownlist tulajdonsága. Az egyik esetben tudok gépelni a legördülőbe és ezáltal keresni is tudok akár több karakterre. Pl. legördítem és beírom, hogy Buda, akkor csak a Buda+val kezdődő települések jelennek meg.
Ezzel szemben van egy olyan lehetőség is, hogy nem tudok írni a legördülőbe, de ha megnyomon a B betűt, akkor a B-vel kezdődőekhez ugrik. Viszont ha ezután megnyomom az u-t, akkor az U betűhöz ugrik.
Nekem a kettő kombinációja kellene. Ne lehessen rossz adatot bevinni, de több karakterre kereshessek. -
-
Gh0sT
addikt
Akkor részletesen a probléma:
Adott egy VB form, amin DataGrid-ben szeretném megjeleníteni egy tábla bizonyos adatait. A tábla egyes mezői felett lenne egy-egy legördülő menü, amik tartalmaznák az eddig bevitt ügyfél neveket, településeket, partner típusokat, és ÜKM-eket.
Ha megnyitom a formot, akkor szeretném, hogy az összes rekord megjelenjen. Ha viszont a 4 combobox bármelyikében kiválasztok egy paramétert, vagy beírok valamit, akkor történjen egy szűrés. Igazából az lenne a szép, ha a Combobox-ok első eleme az lenne, hogy ''Összes'' és csak utána szerepelnének a mezők rögzített értékei. Nem tudom, hogy ez mennyire volt érthető, de írok egy példát.
Rögzítek mondjuk 30 ügyfelet, ezeknek az egyik része budapesti, szolnoki, kecskeméti és debreceni. Típusukat tekintve vannak szállítók és ügyfelek.
Ha megnyitom a formot, akkor szeretném ha szépen megjelenne az összes ügyfél. Ellenben, ha kiválasztom a Település mező felett látható Comboboxot, akkor ott egy ilyen lista fogadjon:
Összes
Budapest
Szolnok
Kecskemét
Debrecen
A partner típus felett pedig az alábbi Comboboc szerepeljen:
Összes
Ügyfél
Szállító
Namost van ugye egy tárolt eljárásom az alábbi praméteres lekérdezéssel:
SELECT ...
FROM ...
WHERE
(Ugyfel.Ugyfel_nev LIKE @Ugyfelnev) AND
(Ugyfel.Telepules LIKE @Telepules) AND
(Ugyfel.UKM_nev LIKE @UKM_nev) AND
(Ugyfel.Partner_tipus LIKE @Partner_tipus
Ezzel igazából nem mentem semmire, mert ha nincs % jel a lekérdezésben, akkor nem kapok találatot. Nosza gondoltam egy ilyet:
SELECT ...
FROM ...
WHERE
(Ugyfel.Ugyfel_nev LIKE @Ugyfelnev + '%') AND
(Ugyfel.Telepules LIKE @Telepules + '%') AND
(Ugyfel.UKM_nev LIKE @UKM_nev + '%') AND
(Ugyfel.Partner_tipus LIKE @Partner_tipus + '%')
Ez látszólag jó kellene legyen, de valami nagyon szép hibát kapok és le sem tudom tárolni az eljárást. Valami Nchar meg Text dolgokról rinyál, de rohadtul nem értettem.
Szóval maradt az első megoldás kiegészítve a következővel:
Egyelőre a Comboxok helyett Textboxokat alkalmazok. Leginkább azért, mert ugyan a Combobox Text tulajdonságához hozzá tudom rendelni az egyes településeket és partner típusokat, de Összesen rovat nincsen. Textboxnál meg ha üresen hagyom, akkor szűr mindenre, de csak akkor, ha az első paraméteres lekérdezést kombinálom azzal, hogy a Textbox.Text-hez hozzáadom a ''%'' jelet.
Remélem érthető voltam. Ez most így működik, de csak TextBox-szal. A ComboBoxhoz kellene még rendelnem az Összesen rovatot, a többit ki tudom olvasni az adatbázisból.
Egyébként milyen adattípust kellene nekem használnom az adatbázisnál ha mondjuk tepelülés neveket rögzítek? Char(n), Nchar(n), Text, NText? Az a gyanúm, hogy itt lehet valami bibi, mert Nchar-ra nem is tudok Like-os lekérdezést készíteni. -
Panther
HÁZIGAZDA
Az nem igazán szép... hogy próbáltad először (ahogy nem működött)?
Amúgy szerintem a legszebb megoldás, ha egy ''AND (valami = @valami_bemenet) '' rész-stringet csak akkor teszel bele a lekérdezésbe, ha a @valami_bemenet meg van adva (nem üres string).
Egy kérdés: a userek pontosan adják meg pl a település nevét ha már egyszer megadják, vagy lehet olyat is hogy ''udap'', és akkor is meg kell találni hogy Budapest?
(Ez Visual Basic?)
[Szerkesztve] -
-
Gh0sT
addikt
Adott az alábbi paraméteres lekérdezés:
SELECT Ugyfel.Ugyfel_nev, Ugyfel.Telepules, Ugyfel.UKM_nev, Ugyfel.Partner_tipus, Ugyfel.Adoszam, Partner_tipus.Partner_ikon
FROM Ugyfel INNER JOIN
Partner_tipus ON Ugyfel.Partner_tipus = Partner_tipus.Partner_tipus
WHERE (Ugyfel.Ugyfel_nev = @Ugyfelnev) AND (Ugyfel.Telepules = @Telepules) AND (Ugyfel.UKM_nev = @UKM_nev) AND
(Ugyfel.Partner_tipus = @Partner_tipus)
A következő paramétereket kéri:
1. Ügyfélnév
2. Település
3. UKM
4. Partner típus
Működik is részben. Ha mindenhova írok adatot, akkor felhozza a találatokat. De én azt szeretném, hogy rá tudjak szűrni mondjuk csak a budapesti ügyfelekre is. Tehát milyen helyettesítők karaktert adjak meg a többi paraméternek, hogy az összes budapesti ügyfelet lássam? A * nem működik... -
Tyrael
senior tag
lekerdezed az adatbazisbol, hogy hany rekord van benne osszesen
php-val, vagy ha ez nem webes progi, akkor c-vel generalsz egy veletlenszamot 1 es az ossz rekord szama kozott
lekerdezed a kapott szamu rekordot.
jah, es cron nevu paranccsal adott idokozonkent le lehet futtatni ezt a scriptet
Tyrael
[Szerkesztve] -
nagyben
csendes tag
Ja és több alternatív megoldást is elfogadok, persze csak ha több is létezik...
-
nagyben
csendes tag
Ha tudtok olyan linket esetleg ahol ez le van írva az is jó lesz...
-
nagyben
csendes tag
Sziasztok mindenki,
Hogyan lehet olyan SQL utasítást készíteni, amelyik minden egyes futtatáskor egy-egy véletlenszerűen kiválasztott rekordot jelenít meg?
Meg lehet-e azt is oldani, hogy a rekordot tartalmazó tábla is véletlenszerűen legyen az adatbázison belül kiválasztva?
Ha meg, kérlek írjátok le hogyan. /Lehetőleg az írjon aki tényleg ért az SQL-hez.
(magát a lekérdezést kéne leírni itt vhogyan parancssorrlal -- (SELECT...)
Köszi
Minél hamarabb válaszoljatok légyszi
Öccs
Aktív témák
- Bomba ár! Dell Latitude 7280 - i5-7GEN I 8GB I 256SSD I 12,5" FHD I Cam I W11 I Garancia!
- ÁRGARANCIA!Épített KomPhone i5 14600KF 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- MacBook felváráslás!! MacBook, MacBook Air, MacBook Pro
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest