Hirdetés
- Android alkalmazások - szoftver kibeszélő topik
- iPhone topik
- Szívós, szép és kitartó az új OnePlus óra
- Amazfit Bip 6 - jót olcsón
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Samsung Galaxy A56 - megbízható középszerűség
- Baseus Inspire XH1 – nyomokban Bose-t tartalmaz
- Félmillió felett a kiszállított Xiaomi autók száma
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Apple Watch Sport - ez is csak egy okosóra
Új hozzászólás Aktív témák
-
nyunyu
félisten
válasz
Postas99
#5707
üzenetére
Próbálom összefoglalni, hogy mit szeretnél:
- A táblához kéne C-nek azt az elemét kapcsolni, ami a B tábla szerint éppen érvényes.Sima ügy, A-hoz hozzájoinolod a B éppen érvényes rekordját *, aztán ahhoz joinolod a C-t.
Valahogy így:
SELECT a.csnev,
a.knev,
a.adoaz,
a.szulido,
c.elemnev As Neme,
b.elemid,
alkalmazas.datumtol,
alkalmazas.datumig,
kapcsolatok.lista AS KapcsolatLista
FROM a
INNER JOIN b
ON a.szemelyid = b.szemelyid
AND b.datumtol <= getdate()
AND nvl(b.datumig, getdate() + 1) > getdate()
INNER JOIN c
ON b.elemid = c.elemid
INNER JOIN alkalmazas
ON a.szemelyid = alkalmazas.szemelyid
INNER JOIN (SELECT szemelyid,
STRING_AGG(adatok, ',') WITHIN GROUP (ORDER BY adatok) AS lista
FROM kapcsolat
GROUP BY szemelyid) kapcsolatok
ON a.szemelyid = kapcsolatok.szemelyid;Persze lehetne a
nvl(b.datumig, getdate() + 1) > getdate()helyettb.datumig IS NULL-ot írni, de így bolondbiztosabb, meg a későbbiekben sem kell módosítani, ha netán valaki '2099-12-31'-et ír be az érvényesség vége mezőbe.*: előbb szokás szerint eggyel túlgondoltam, aztán máris az esetleges adathibák jártak az eszemben .
Szakmai ártalom
-
nyunyu
félisten
válasz
Postas99
#5701
üzenetére
Ebből kb. ennyit sikerült megérteni:
Egy kitétemény van még amennyiben egy FIX érték többször szerepel abbból csak a VALID értéket kell megjeleníteni amit a b.ervenyessegvege mező szabályoz. HA az érték NULL akkor az az adat a valid.De ezt sem teljesen.
Ha az érvényességre akarsz szűrni, akkor kell a b tábla join feltételei közé (vagy a query végi WHERE-be) egy
b.ervenyessegkezdete >= getdate() AND
nvl(b.ervenyessegvege, getdate() +1 ) > getdate()
(vagy hogy hívják MS SQL-ül az oracles sysdate-et)Viszont akkor az összes olyan találatot ki fogod szűrni, amihez már csak lejárt b rekordok vannak.
Vagy ha kettőnek nincs lejárati dátuma, akkor mindkettőt megkapod.Egyébként meg az ilyen adathibák javítására hogy egy b-ből nincs érvényes (vagy több érvényes van), nem az a megoldás, hogy egy feleslegesen túlbonyolított queryvel próbálod kiszűrni őket, hanem kézzel be kéne updatelni az érintett rekordokon az érvényesség eleje, vége dátumokat JÓ értékre, hogy egy időszakra PONTOSAN EGY érvényes rekord legyen.
(Tudom, könnyű ezt mondani, de a rendszerszervezőnknek tavaly nyár óta nincs ideje arra, hogy meghatározza, hogy a többszörös cím, meg telefonszám adataink közül melyik példányt tartsam meg érvényesnek. Közben volt még pár adatmigrációs projekt is, ami extra izgalmakat okozott.
) -
Postas99
őstag
válasz
Postas99
#5701
üzenetére
Elnézést de a CODE formatot valamiért nem vette be:
SELECT a.csnev , a.knev, a.adoaz, a.szulido, c.elemnev As Neme, b.elemid,alkalmazas.datumtol, alkalmazas.datumig, STUFF((SELECT ', ' + kapcsolat.adatok FROM kapcsolat WHERE kapcsolat.szemelyid = a.szemelyid FOR XML PATH('')), 1, 2, '') AS KapcsolatLista " &"FROM a " &"INNER JOIN alkalmazas ON a.szemelyid = alkalmazas.szemelyid " &"INNER JOIN c ON a.elmid = c.elemid " &"INNER JOIN b ON a.szemlyid = b.szemelyid "
Új hozzászólás Aktív témák
- Okos Otthon / Smart Home
- Azonnali informatikai kérdések órája
- iPad topik
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- World of Warships
- Konzolokról KULTURÁLT módon
- World of Tanks - MMO
- Android alkalmazások - szoftver kibeszélő topik
- GL.iNet Flint 2 (GL-MT6000) router
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- További aktív témák...
- AKCIÓ! 16" Lenovo IdeaPad 5 Pro 16" Ryzen 7 5800H 16GB 1TB QHD+ 1év gar.
- GYÖNYÖRŰ iPhone 14 Pro Max 256GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3172
- 35" ASUS ROG Swift PG35VQ curved GAMER monitor
- PNY XLR8 CS3140 M.2 NVMe 4.Gen 1TB SSD
- Apple iPhone 15 Pro Max 256GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest



