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