sql >> Database >  >> RDS >> Sqlserver

SQL-query om de resultatenset in slechts twee kolommen te krijgen

U kunt de UNPIVOT functie om de kolommen in rijen te veranderen:

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

Zie SQL Fiddle met demo .

Het ondraaien vereist dat het gegevenstype op alle kolommen hetzelfde is. Het kan dus zijn dat u een cast moet uitvoeren /converteren op kolommen met verschillende datatypes vergelijkbaar met dit:

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;

Zie SQL Fiddle met demo .

Vanaf SQL Server 2008 kan dit ook worden geschreven met een CROSS APPLY met een VALUES :

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

Zie SQL Fiddle met demo



  1. probleem met het krijgen van num_rows met PDO-klasse in php

  2. php mysql invoegen (max(id)+1)

  3. Verwijzingen naar MySQL-vreemde sleutels

  4. PostgreSQL - FOUT:kolomdatum kan niet worden gecast om datum te typen