Trasporre i valori di una colonna in più record in un unico record con...

lunedì 01 giugno 2009 - 15.38

shakermaker Profilo | Newbie

Salve, ho questa tabella:
SESSION UID_KEY1 UID_KEY2 UID_KEY_FINAL
123 1 1 10
123 1 2 20
123 1 3 30
123 1 4 40
123 2 1 50
123 2 2 60
123 2 3 70
123 2 4 80
345 1 1 90
345 1 2 110
345 1 3 120
345 1 4 130

Dovrei trasporre la colonna UID_KEY_FINAL in 4 colonne UID_KEY_FINAL1, UID_KEY_FINAL2, UID_KEY_FINAL3, UID_KEY_FINAL4 che riportano il valore di UID_KEY_FINAL secondo il valore assunto da UID_KEY2 (che va da 1 a 4) raggruppati per SESSION e UID_KEY1. Esempio:

SESSION UID_KEY1 UID_KEY_FINAL1 UID_KEY_FINAL2 UID_KEY_FINAL3 UID_KEY_FINAL4
123 1 10 20 30 40
123 2 50 60 70 80
345 1 90 110 120 130

Come costruire la query SQL?
Grazie

lbenaglia Profilo | Guru

>Come costruire la query SQL?

Ciao Cinzia,

Che DBMS e versione utilizzi?

>Grazie
Prego.

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

antoniox Profilo | Newbie

Mi "aggancio" a questo thread perchè ho una esigenza similare a quella di Cinzia (DBMS: Access 2003).

campi Tabella\Query:
ID_UTENTE ; TUTORE ; DATA_NASCITA_TUTORE

Record di esempio:
119A ; Mario Rossi ; 01/01/1930
119A ; Luisa Bianchi ; 02/02/1950
200B ; Tizio Caio ; 03/03/1960

Vorrei riportare i record come segue:

119A ; Mario Rossi ; 01/01/1930 ; Luisa Bianchi ; 02/02/1950
200B ; Tizio Caio ; 03/03/1960

Aggiungo che il raggruppamento avviene unicamente in riferimento all'ID_UTENTE e che il numero massimo di TUTORI per ciascun ID_UTENTE è 3.

Grazie!

Antonio

shakermaker Profilo | Newbie

Uso SQL Server 2005.
Ho provato una soluzione usando
ROW_NUMBER() OVER(PARTITION BY...
quindi ho una prima selezione per ogni 4 campi... ma vorrei controllare di più la cosa in base al campo UID_KEY2, che non è detto ci siano sempre 4 record per i valori 1,2,3,4. Magari ci sono solo i valori 2 e 3 e io devo inserire correttamente tali valori nelle colonne UID_KEY_FINAL2 e UID_KEY_FINAL3.

shakermaker Profilo | Newbie

Pubblico la soluzione a me congeniale:

SELECT
[session], [UID_KEY_1],
, MAX(CASE WHEN UID_KEY_2 =1 THEN UID_KEY_FINAL ELSE NULL END) AS UID_KEY_FINAL1
, MAX(CASE WHEN UID_KEY_2 =2 THEN UID_KEY_FINAL ELSE NULL END) AS UID_KEY_FINAL2
, MAX(CASE WHEN UID_KEY_2 =3 THEN UID_KEY_FINAL ELSE NULL END) AS UID_KEY_FINAL3
, MAX(CASE WHEN UID_KEY_2 =4 THEN UID_KEY_FINAL ELSE NULL END) AS UID_KEY_FINAL4
FROM T_OPE_HIS_RWA_PLN
--WHERE bla bla bla
GROUP BY session,[UID_KEY_1]

Alla fine era relativamente semplice....
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5