La conversione di colonne in righe è denominata UNPIVOT
. Non hai specificato quale versione di SQL Server stai usando, ma ci sono diversi modi per ottenere il risultato.
È possibile utilizzare SELECT
con UNION ALL
:
SELECT name, 'age' as column, cast(age as varchar(10)) as value
FROM yourtable
UNION ALL
SELECT name, 'gender' as column, gender as value
FROM yourtable;
Se si utilizza SQL Server 2005 +, quindi è possibile utilizzare la funzione UNPIVOT:
SELECT name, column, age
FROM
(
SELECT
name,
age = cast(age as varchar(10)),
gender
FROM yourtable
) d
UNPIVOT
(
value
for column in (age, gender)
) unpiv;
Infine, anziché la funzione UNPIVOT voi potrebbe anche utilizzare CROSS APPLY
con VALUES
(2008+) o UNION ALL
:
SELECT name, column, age
FROM yourtable
CROSS APPLY
(
VALUES
('age', cast(age as varchar(10)),
('gender', gender)
) c (column, value);
Ognuna di queste versioni ti darà il risultato che desideri. Noterai che ho dovuto trasmettere la colonna age
a varchar
. Questo perché il tipo di dati/lunghezza (in unpivot) delle colonne deve essere lo stesso poiché li trasformerai in una singola colonna nel risultato finale.
Nei test su un server SQL 2008 potrebbe essere necessario specificare anche il valore max_length, quindi se Gender era char (1), era necessario eseguire il cast per far sì che lo switch unpivot non si verificasse. Non ho provato con l'applicazione esterna, però. –
quindi quello che stai dicendo è, nella mia ricerca di come usare pivot, dal momento che ho trovato solo le applicazioni opposte, avrei dovuto guardare UNpivot ... geniale !! :) Grazie! – mathematician
@JaazCole È solo UNPIVOT che richiede che il tipo di dati sia della stessa lunghezza - vedere questo su [DBA.SE] (http://dba.stackexchange.com/questions/54353/why-does-sql-server-require- il tipo di dati-lunghezza-to-be the same-when-using-unpivo) – Taryn