>INSERT INTO [PROVA].[dbo].[Table1]([matricola], [anno_week],
>[quantita])
>VALUES(100,200635,1)
>
>prossimo inserimento:
>INSERT INTO [PROVA].[dbo].[Table1]([matricola], [anno_week],
>[quantita])
>VALUES(100,200636,3)
>
>INSERT INTO [PROVA].[dbo].[Table1]([matricola], [anno_week],
>[quantita])
>VALUES(100,200701,1)
>
>INSERT INTO [PROVA].[dbo].[Table1]([matricola], [anno_week],
>[quantita])
>VALUES(101,200702,1)
>
>RESULTS table1
>----------------
>id matricola anno_week quantita'
> 1 100 200635 1
> 2 100 200636 3
> 3 100 200701 1
> 4 101 200701 1
>
>ed in modo automatico la SP deve creare delle colonne nella table2
>in modo da avere il seguente risultato:
>
>RESULTS table2
>----------------
>matricola 2006 2007
>100 5 1
>101 0 1
Come sempre i tuoi esempi sono imprecisi, segno che non li hai mai provati anche se ti ho già fatto notare la cosa in passato...
1) Il database Prova noi non lo abbiamo, quindi quei comandi di INSERT dobbiamo modificarli;
2) Il result set è sbagliato riferito ai dati di prova (Per matricola 100, nel 2006 il valore è 4 non 5!).
Non ci dici che DBMS stai utilizzando, la sua versione, ecc...
Infine non è chiaro a cosa serva Tabella2 dato che tutti i dati che ti servono si trovano in Tabella1.
Bene, a questo punto ti fornisco questa soluzione per SQL Server 2005:
USE tempdb;
GO
CREATE TABLE dbo.Table1(
id int NOT NULL IDENTITY PRIMARY KEY,
matricola tinyint NOT NULL,
anno_week char(6) NOT NULL,
quantita tinyint NOT NULL
);
GO
INSERT dbo.Table1 VALUES(100, '200635', 1);
INSERT dbo.Table1 VALUES(100, '200636', 3);
INSERT dbo.Table1 VALUES(100, '200701', 1);
INSERT dbo.Table1 VALUES(101, '200702', 1);
GO
SELECT
matricola
, COALESCE([2006], 0) AS [2006]
, COALESCE([2007], 0) AS [2007]
FROM (
SELECT
matricola
, SUBSTRING(anno_week, 1, 4) AS Anno
, quantita
FROM dbo.Table1
) AS SourceTable
PIVOT (
SUM(quantita)
FOR Anno IN([2006], [2007])
) AS PivotTable;
GO
/* Output:
matricola 2006 2007
--------- ----------- -----------
100 4 1
101 0 1
(2 row(s) affected)
*/
DROP TABLE dbo.Table1;
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org