Premesso che queste cose solitamente si fanno a lato applicazione .......
tu vorresti fare con una unica SELECT quella roba li ....
assomiglia un pochino a una PIVOT o Campi Incrociati ma se le righe (record)
sono solamente 10 che poi diventeranno 10 colonne (campi) allora puoi fare cosi:
anche se fossero 20 o 30 potresti
Immagina di avere questa tabella di nome "Tab"
- Key ----- Testo ----- Chiave primaria
- Val1 ------ Numerico
- Val2 ------ Numerico
Per la comprensione cominciamo a fare più SELECT
che alla fine andremo a nidificare in una unica
Ho usato Access per la sintassi, poi dovrai adeguarla al tuo DB
Facciamo una prima SELECT di nome "Q01" per numerare i record
poi su "Q01" facciamo la "Q04" che ci mette il Val1 in orizzontalecodice:SELECT T1.Key, T1.Val1, T1.Val2, "N" & Format((SELECT Count(T2.Key) FROM Tab AS T2 WHERE T1.Key>=T2.Key),"00") AS RecNum FROM Tab AS T1 ;
poi ancora su "Q01" facciamo la "Q05" che ci mette il Val2 in orizzontalecodice:SELECT Max(IIf([RecNum]="N01",[Val1])) AS Xx01, Max(IIf([RecNum]="N02",[Val1])) AS Xx02, Max(IIf([RecNum]="N03",[Val1])) AS Xx03, Max(IIf([RecNum]="N04",[Val1])) AS Xx04, Max(IIf([RecNum]="N05",[Val1])) AS Xx05, Max(IIf([RecNum]="N06",[Val1])) AS Xx06 FROM Q01 ;
poi su "Q04" e "Q05" facciamo la "Q08" che con UNION sovrappone le 2 righecodice:SELECT Max(IIf([RecNum]="N01",[Val2])) AS Xx01, Max(IIf([RecNum]="N02",[Val2])) AS Xx02, Max(IIf([RecNum]="N03",[Val2])) AS Xx03, Max(IIf([RecNum]="N04",[Val2])) AS Xx04, Max(IIf([RecNum]="N05",[Val2])) AS Xx05, Max(IIf([RecNum]="N06",[Val2])) AS Xx06 FROM Q01 ;
codice:SELECT Q04.Xx01, Q04.Xx02, Q04.Xx03, Q04.Xx04, Q04.Xx05, Q04.Xx06 FROM Q04 UNION ALL SELECT Q05.Xx01, Q05.Xx02, Q05.Xx03, Q05.Xx04, Q05.Xx05, Q05.Xx06 FROM Q05 ;
Che messo in una unica SELECT multinidificata viene cosi
Facci saperecodice:SELECT Q04.Xx01, Q04.Xx02, Q04.Xx03, Q04.Xx04, Q04.Xx05, Q04.Xx06 FROM ( SELECT Max(IIf([RecNum]="N01",[Val1])) AS Xx01, Max(IIf([RecNum]="N02",[Val1])) AS Xx02, Max(IIf([RecNum]="N03",[Val1])) AS Xx03, Max(IIf([RecNum]="N04",[Val1])) AS Xx04, Max(IIf([RecNum]="N05",[Val1])) AS Xx05, Max(IIf([RecNum]="N06",[Val1])) AS Xx06 FROM ( SELECT T1.Key, T1.Val1, T1.Val2, "N" & Format((SELECT Count(T2.Key) FROM Tab AS T2 WHERE T1.Key>=T2.Key),"00") AS RecNum FROM Tab AS T1 ) AS Q01 ) AS Q04 UNION ALL SELECT Q05.Xx01, Q05.Xx02, Q05.Xx03, Q05.Xx04, Q05.Xx05, Q05.Xx06 FROM ( SELECT Max(IIf([RecNum]="N01",[Val2])) AS Xx01, Max(IIf([RecNum]="N02",[Val2])) AS Xx02, Max(IIf([RecNum]="N03",[Val2])) AS Xx03, Max(IIf([RecNum]="N04",[Val2])) AS Xx04, Max(IIf([RecNum]="N05",[Val2])) AS Xx05, Max(IIf([RecNum]="N06",[Val2])) AS Xx06 FROM ( SELECT T1.Key, T1.Val1, T1.Val2, "N" & Format((SELECT Count(T2.Key) FROM Tab AS T2 WHERE T1.Key>=T2.Key),"00") AS RecNum FROM Tab AS T1 ) AS Q01 ) AS Q05 ;
.

Rispondi quotando