Soci (Soczó Zsolt) szakmai blogja

2008.01.25.

SQL fejtörő

A feladvány itt van.
Tegnap éjjel fájt Benedek hasa, sétálgattam kicsit vele, közben kitaláltam rá egy megoldást, és még jó is az eredménye. :)

Pár nap múlva kirakom a sajátomat, addig is jöhet a tiétek.

4 Comments

  1. with q(v, vid)
    as
    (
    select amt, vid
    from Vouchers v1
    union all
    select
    v+amt, v1.vid
    from q, Vouchers v1
    where
    q.vid<v1.vid
    )
    select distinct v from q order by 1

    Comment by kaz — 2008.01.25. @ 16:20

  2. Kaz: ügyes, tényleg, kezdek szégyenkezni a saját megoldásommal. :)

    Comment by Soczó Zsolt — 2008.01.25. @ 16:28

  3. SELECT DISTINCT
    SUM(v.amt) as amt
    FROM
    (
    SELECT
    nt.number
    FROM
    (
    SELECT
    row_number() OVER (ORDER BY s1.name) as number
    FROM
    sysobjects s1
    CROSS JOIN sysobjects s2) nt
    WHERE nt.number 0)
    GROUP BY n.number

    Magyarul egy szám bitindexeinek tekintem a vid értékeket, és ezeket minden kominációban ki-be kapcsolgatom, amit úgy érek el, hogy egész számogat generálok, és a bitekre nézem, hogy melyik mikor van bekapcsolva a különböző egész számok bináris ábrázolása esetében. Minden esetben a bekapcsolt bitekhez tartozó értékeket kell összeadni.

    Mit mondjak, eléggé gáz módon lehet egész számokat generálni. A CTE és a rekurzív CTE-s megoldás szintés fos.

    Kaz megoldása sztem ötletesebb.

    Comment by kpocza — 2008.01.26. @ 11:55

  4. SELECT DISTINCT
    SUM(v.amt) as amt
    FROM
    (
    SELECT
    nt.number
    FROM
    (
    SELECT
    row_number() OVER (ORDER BY s1.name) as number
    FROM
    sysobjects s1
    CROSS JOIN sysobjects s2) nt
    WHERE nt.number < power(2, (select max(vid)+1 from Vouchers))
    ) n
    INNER JOIN Vouchers v on (n.number & convert(int, (power(2, v.vid))) > 0)
    GROUP BY n.number

    Na pár html karaktert megevett az előző komment. Próbálom másképp küldeni.

    Comment by kpocza — 2008.01.26. @ 11:58

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress