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

  • Üdv urak!
    Ne ijedjetek meg, de SQL-lel kapcsolatos kérdésem lenne. :) Sajnos olyan régen foglalkoztam ezzel, hogy a komplexebb ismeretek teljesen kiestek mára a fejemből. Na jó, az alapvető is. :D

    Amit megvalósítanék, hogy a sorokban tárolt adatot oszlopokba rendezve kérdezném le. Tehát:

    col1 col2 col3
    a 1 jan
    a 11 feb
    b 2 feb
    c 3 feb

    legyen

    név jan feb
    a 1 11
    b NULL 2
    c NULL 3

    Arra már rájöttem, hogy a CASE lesz a barátom, viszont az a kérdésem, hogy egy menetben meg lehet-e valósítani, hogy a col3 értékei oszlopok legyenek?
    Vagy először lekérdezem a col3-t, és ezen adatok segítségével dinamikusan először legenerálom az sql kifejezésemet egy string-ben, majd futtatom?
    Az sajnos nem játszik, hogy fixen megadom az oszlopokat, mert csak az utolsó 3 hónap kéne.

    CASE-hez van egy példa fent a #3905-ben.

    Ha csak az utolsó 3 hónap kellene, akkor esetleg az eredeti select is lehetne már előre így filterezve. A nem szükséges hónapoknál csak null fordulna elő. T-SQL-ben például ilyen most a [mar] oszlop, az eredeti soraid szerint:

    DECLARE @t1 TABLE (col1 char(1), col2 int, col3 varchar(10));
    INSERT @t1 VALUES ('a', 1, 'jan'),('a', 11, 'feb'),('b', 2, 'feb'),('c', 3, 'feb');

    SELECT * FROM
    (select col1 as [név], col2, col3 FROM @t1) AS src
    PIVOT (SUM(col2) FOR col3 IN ([jan],[feb], [mar])) AS pvt;

    Ha mármost ez egy dinamikus menet lesz, és az IN ( ) részt valamilyen distinctből szedjük ki előre, a jan - feb - mar sorrendért eléggé meg kell majd küzdeni. Akkor már inkább lehetne simán sorszám.

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