Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête SQL pour obtenir le jeu de résultats dans deux colonnes uniquement

Vous pouvez utiliser le UNPIVOT fonction pour transformer les colonnes en lignes :

select id, value
from yourtable
unpivot
(
  value
  for col in ([fName], [lName], [Address], [PostCode], [ContactNumber])
) unpiv

Voir SQL Fiddle avec démo .

Le unpivot exigera que le type de données de toutes les colonnes soit le même. Vous devrez donc peut-être effectuer un cast /convert sur toutes les colonnes avec différents types de données similaires à ceci :

select id, value
from
(
  select id, [fName], [lName], [Address], [PostCode],
    cast([ContactNumber] as varchar(15)) [ContactNumber]
  from yourtable
) src
unpivot
(
  value
  for col in ([fName], [lName], [Address], [PostCode], [ContactNumber])
) unpiv;

Voir SQL Fiddle avec démo .

À partir de SQL Server 2008, cela peut également être écrit à l'aide d'un CROSS APPLY avec un VALUES :

select t.id,
  c.value
from yourtable t
cross apply
(
  values(fName), 
    (lName), 
    (Address), 
    (PostCode), 
    (cast(ContactNumber as varchar(15)))
) c (value)

Voir SQL Fiddle avec démo