>Chi puo' aiutarmi?
Io
Osserva il seguente esempio:
USE tempdb;
CREATE TABLE dbo.Periodi(
id smallint NOT NULL PRIMARY KEY,
periodo nvarchar(10) NOT NULL
);
CREATE TABLE dbo.Utenti(
id smallint NOT NULL PRIMARY KEY,
nome nvarchar(10) NOT NULL
);
CREATE TABLE dbo.PeriodiUtenti(
id smallint NOT NULL PRIMARY KEY,
fkidperiodo smallint NOT NULL,
fkidanagrafica smallint NOT NULL,
valore int NOT NULL,
CONSTRAINT FK_PeriodiUtenti_Periodi FOREIGN KEY(fkidperiodo)
REFERENCES dbo.Periodi(id),
CONSTRAINT FK_PeriodiUtenti_Utenti FOREIGN KEY(fkidanagrafica)
REFERENCES dbo.Utenti(id)
);
INSERT dbo.Periodi VALUES (1, 'Genn 09');
INSERT dbo.Periodi VALUES (2, 'Febb 09');
INSERT dbo.Periodi VALUES (3, 'Marz 09');
INSERT dbo.Periodi VALUES (4, 'Apr 09');
INSERT dbo.Utenti VALUES (1, 'Gianni');
INSERT dbo.Utenti VALUES (2, 'Peppe');
INSERT dbo.Utenti VALUES (3, 'Antonio');
INSERT dbo.Utenti VALUES (4, 'Romolo');
INSERT dbo.PeriodiUtenti VALUES (1, 1, 1, 10);
INSERT dbo.PeriodiUtenti VALUES (2, 1, 2, 12);
INSERT dbo.PeriodiUtenti VALUES (3, 2, 1, 13);
INSERT dbo.PeriodiUtenti VALUES (4, 4, 3, 15);
SELECT
id
, nome
, [Genn 09] AS 'Genn 09'
, [Febb 09] AS 'Febb 09'
, [Marz 09] AS 'Marz 09'
, [Apr 09] AS 'Apr 09'
FROM (
SELECT
U.id
, U.nome
, P.periodo
, PU.valore
FROM dbo.Utenti AS U
LEFT JOIN dbo.PeriodiUtenti AS PU
ON U.id = PU.fkidanagrafica
LEFT JOIN dbo.Periodi AS P
ON PU.fkidperiodo = P.id
) AS Q
PIVOT (
MAX(valore)
FOR periodo IN ([Genn 09], [Febb 09], [Marz 09], [Apr 09])
) AS pvt
ORDER BY id;
/* Output:
id nome Genn 09 Febb 09 Marz 09 Apr 09
------ ---------- ----------- ----------- ----------- -----------
1 Gianni 10 13 NULL NULL
2 Peppe 12 NULL NULL NULL
3 Antonio NULL NULL NULL 15
4 Romolo NULL NULL NULL NULL
(4 row(s) affected)
*/
DROP TABLE dbo.PeriodiUtenti, dbo.Periodi, dbo.Utenti;
Tieni presente che l'operatore PIVOT non permette la scrittura di di query crosstab dinamiche, pertanto dovrai prevedere tutte le colonne che ti servono (io mi sono limitato ai primi 4 mesi).
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org