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
codice:
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 su "Q01" facciamo la "Q04" che ci mette il Val1 in orizzontale
codice:
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 ancora su "Q01" facciamo la "Q05" che ci mette il Val2 in orizzontale
codice:
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
;
poi su "Q04" e "Q05" facciamo la "Q08" che con UNION sovrappone le 2 righe
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
codice:
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
;
Facci sapere
.