Hirdetés

Keresés

Ú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() helyett b.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 :DDD

Új hozzászólás Aktív témák