tabella del server SQL unpivoting
-
18-09-2019 - |
Domanda
Ho problemi cercando di UNPIVOT seguente tabella.
| operazione | ... altre colonne ... | A1 | B1 | C1 | A2 | B2 | C2 | A3 | B3 | C3 | ... |
in qualcosa di simile ...
| operazione | ... altre colonne ... | AValue | BValue | CValue |
In questo momento sto facendo in questo modo
SELECT operation , ...other columns , Avalue, BValue , CValue
FROM (SELECT operation, ...other columns, A1, B1, C1
FROM MyTable
UNION ALL
SELECT operation, ...other columns, A2, B2, C2
FROM MyTable
UNION ALL
SELECT operation, ...other columns, A3, B3, C3
FROM MyTable
)
Il problema è che ho 30 serie di ABC, in modo da 30 sindacati. Ho provato con UNPIVOT ma non ho di essere in grado di trovare la soluzione giusta, questa è la mia prima volta cercando di usarla.
Questo è il mio tentativo UNPIVOT usign
SELECT opration
, ...other columns ...
,AValue
,BValue
,CValue
FROM MyTable
UNPIVOT ( [AValue] FOR XX IN (A1,A2,A3,...,A30)) AS upv1
UNPIVOT ( [BValue] FOR yy IN (B1,B2,B3,...,B30)) AS upv2
UNPIVOT ( [CValue] FOR ZZ IN (C1,C2,C3,...,C30)) AS upv3
Il problema è che non capisco il motivo per cui sta tornando milioni di righe, quando l'atteso dovrebbe essere di circa 10k. Tutte le idee?
EDIT:. Ho appena realizzato che ogni UNPIVOT funziona con il set di risultati della precedente dichiarazione UNPIVOT che causano l' 'esplosione dei dati'
Grazie
Soluzione
Fatto! Plamen Ratchev mi ha dato l'aiuto finale qui
SELECT opration
, ...other columns ...
,AValue
,BValue
,CValue
FROM MyTable
UNPIVOT ( [AValue] FOR XX IN (A1,A2,A3,...,A30)) AS upv1
UNPIVOT ( [BValue] FOR yy IN (B1,B2,B3,...,B30)) AS upv2
UNPIVOT ( [CValue] FOR ZZ IN (C1,C2,C3,...,C30)) AS upv3
WHERE RIGHT(XX, 2) = RIGHT(YY, 2)
AND RIGHT(XX, 2) = RIGHT(ZZ, 2)
Altri suggerimenti
Io non sono troppo chiare su quello che stai cercando, ma si potrebbe provare "unione" e non "unione tutti".