Utilisation de SQL, comment puis-je convertir une seule table de ligne comme celui-ci ...Comment créer une table de paires nom-valeur dans SQL
Firstname Surname Address1 City Country
--------- ------- --------------- ------ -------
Bob Smith 101 High Street London UK
... à une table de nom valeur paires comme ceci:
Name Value
--------- -------
Firstname Bob
Surname Smith
Address1 101 High Street
City London
Country UK
ce script crée la table d'origine:
create table #OriginalTable (Firstname varchar(10), Surname varchar(10),
Address1 varchar(50), City varchar(10), Country varchar(10))
insert into #OriginalTable
select
'Bob' Firstname,
'Smith' Surname,
'101 High Street' Address1,
'London' City,
'UK' Country
Je suis après une génération solution eric qui ne dépend pas des noms des colonnes étant toujours ce qu'ils sont dans l'exemple.
EDIT: J'utilise SQL Server 2005. La solution que je suis après le script SQL pour convertir ces données dans une table de paires nom-valeur
RÉPONSE: En utilisant la réponse que j'ai accepté comme la réponse, ce que je l'ai utilisé:
select
result.Name,
result.Value
from
(select
convert(sql_variant,FirstName) AS FirstName,
convert(sql_variant,Surname) AS Surname,
convert(sql_variant,Address1) AS Address1,
convert(sql_variant,City) AS City,
convert(sql_variant,Country) AS Country
from #OriginalTable) OriginalTable
UNPIVOT (Value For Name In (Firstname, Surname, Address1, City, Country)) as result
Quel SGBD utilisez-vous? Les différents SGBD stockent différemment les noms des colonnes. –
Donc, vous auriez plusieurs lignes pour chaque clé? par exemple. Si la table d'origine n'avait pas seulement une ligne pour Bob Smith, mais aussi pour John Doe, votre table de paires nom-valeur aurait 2 lignes pour chaque clé. –
@Dominic. Non, la table d'origine n'aura toujours qu'une seule ligne. S'il y a plus de lignes dans la base de données pour différentes personnes, la table d'origine n'aurait qu'une seule ligne, b/c c'est juste un filtre pour une seule personne. –