Pivot quasi perfetta

martedì 30 settembre 2008 - 17.57

stepic77 Profilo | Newbie

Ciao a tutti ragazzi, ho una tabella creata per definire delle funzioni dinamiche.
Sulla colonna FUNZIONE c'è il nome della funzione e sulle righe ci sono i parametri da passare.

La pivot è perfetta per risolvere il mio problema:

DECLARE @tbl TABLE (ID INT, PARAMETRO SMALLINT, FUNZIONE VARCHAR(150), VALORE VARCHAR(3)) INSERT INTO @tbl (ID, PARAMETRO, FUNZIONE, VALORE) VALUES(3729,'1450','dbo.CALCOLAMAGG(1,2)','T1') INSERT INTO @tbl (ID, PARAMETRO, FUNZIONE, VALORE) VALUES(3729,'12200','dbo.CALCOLAMAGG(1,2)','T2') SELECT * FROM @tbl PIVOT ( AVG(PARAMETRO) FOR VALORE IN (T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) ) a


Ora le cose si sono complicate, i parametri agli inizi erano interi ora sono stringhe (divise dal |)...


DECLARE @tbl TABLE (ID INT, PARAMETRO VARCHAR(100), FUNZIONE VARCHAR(150), VALORE VARCHAR(3)) INSERT INTO @tbl (ID, PARAMETRO, FUNZIONE, VALORE) VALUES(3729,'1450|1122','dbo.CALCOLAMAGG(1,2)','T1') INSERT INTO @tbl (ID, PARAMETRO, FUNZIONE, VALORE) VALUES(3729,'12200|1122','dbo.CALCOLAMAGG(1,2)','T2') SELECT * FROM @tbl PIVOT ( (PARAMETRO) FOR VALORE IN (T1,T2,T3,T4,T5,T6,T7,T8,T9,T10) ) a


Come definisto il campo (PARAMETRO) di aggregazione?

lbenaglia Profilo | Guru

>Ora le cose si sono complicate, i parametri agli inizi erano
>interi ora sono stringhe (divise dal |)...
>
>
>DECLARE @tbl TABLE (ID INT, PARAMETRO VARCHAR(100), FUNZIONE
>VARCHAR(150), VALORE VARCHAR(3))
>INSERT INTO @tbl (ID, PARAMETRO, FUNZIONE, VALORE)
>VALUES(3729,'1450|1122','dbo.CALCOLAMAGG(1,2)','T1')
>INSERT INTO @tbl (ID, PARAMETRO, FUNZIONE, VALORE)
>VALUES(3729,'12200|1122','dbo.CALCOLAMAGG(1,2)','T2')
>
>SELECT * FROM @tbl
>PIVOT (
> (PARAMETRO)
> FOR VALORE IN (T1,T2,T3,T4,T5,T6,T7,T8,T9,T10)
>) a
>
>
>Come definisto il campo (PARAMETRO) di aggregazione?
Puoi postare il result set che vorresti ottenere?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stepic77 Profilo | Newbie

ID FUNZIONE T1 T2 T3 -----------
3729 dbo.CALCOLAMAGG(1,2) 1450|1122 12200|1122 NULL ............

lbenaglia Profilo | Guru

>ID FUNZIONE T1
>T2 T3 -----------
>3729 dbo.CALCOLAMAGG(1,2) 1450|1122 12200|1122
>NULL ............

Ecco qua:

DECLARE @tbl TABLE ( ID INT, PARAMETRO VARCHAR(100), FUNZIONE VARCHAR(150), VALORE VARCHAR(3) ); INSERT @tbl VALUES(3729,'1450|1122','dbo.CALCOLAMAGG(1,2)','T1'); INSERT @tbl VALUES(3729,'12200|1122','dbo.CALCOLAMAGG(1,2)','T2'); SELECT ID, FUNZIONE, [T1], [T2], [T3], [T4], [T5], [T6], [T7], [T8], [T9], [T10] FROM @tbl PIVOT ( MAX(PARAMETRO) FOR VALORE IN( [T1], [T2], [T3], [T4], [T5], [T6], [T7], [T8], [T9], [T10] ) ) AS PivotTable; /* Output: ID FUNZIONE T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 ----- --------------------- ---------- ----------- ----- ----- ----- ----- ----- ----- ----- ----- 3729 dbo.CALCOLAMAGG(1,2) 1450|1122 12200|1122 NULL NULL NULL NULL NULL NULL NULL NULL (1 row(s) affected) */

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stepic77 Profilo | Newbie

CAVOLO... ero sicuro di averlo provato col max... ....Troppe ore davanti al PC.
Sei un grande Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5