Welcome to Sign in | Help

Re: interogare - cum sa?

  •  04-13-2009, 7:52 PM

    Re: interogare - cum sa?

    Dacă foloseşti SQL Server 2005 sau 2008, poţi folosi operatorul PIVOT, astfel:

    CREATE TABLE tabel (

          id int PRIMARY KEY,

          timp time NOT NULL,

          param varchar(50) NOT NULL,

          val int NOT NULL,

          UNIQUE (timp, param)

    )

     

    INSERT INTO tabel VALUES

    (1,'00:00:00','param1',20),

    (2,'00:00:00','param2',15),

    (3,'00:00:00','param3',12),

    (4,'00:01:00','param1',47),

    (5,'00:01:00','param2',26),

    (6,'00:01:00','param3',32),

    (7,'00:02:00','param1',65),

    (8,'00:02:00','param2',67),

    (9,'00:02:00','param3',98)

     

    SELECT ROW_NUMBER() OVER (ORDER BY timp) AS id, timp,

          param1, param2, param3

    FROM (SELECT timp, param, val FROM tabel) t

    PIVOT (SUM(val) FOR param IN (param1,param2,param3)) p


    (crearea tabelei şi inserarea datelor e făcută cu sintaxa specifică SQL Server 2008, dar SELECT-ul funcţionează şi în SQL Server 2005).


    Dacă ai SQL Server 2000, atunci poţi folosi ceva de genul:


    SELECT (SELECT COUNT(DISTINCT b.timp) FROM tabel b WHERE b.timp<=a.timp) AS id,

          timp,

          SUM(CASE WHEN param='param1' THEN val ELSE 0 END) AS param1,

          SUM(CASE WHEN param='param2' THEN val ELSE 0 END) AS param2,

          SUM(CASE WHEN param='param3' THEN val ELSE 0 END) AS param3

    FROM tabel a GROUP BY timp


    Răzvan
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems