J'ai un champ appelé PropertyValue
dans le tableau UserProfile
qui peut contenir des informations pour l'adresse, le numéro de téléphone, le prénom, le nom, le nom d'utilisateur, la ville, etc ... chaque enregistrement de ce tableau est associé à un utilisateur par UserId, il est également associé à un ProfilePropertyDefinition
qui contient la définition de chacune des propriétés (par exemple, PropertyName).Comment puis-je créer plusieurs colonnes à partir d'un champ de base de données dans SQL Server?
Grâce à cette relation, je peux obtenir toutes les valeurs de propriété avec leurs noms de propriété. Ce que je voudrais le faire pour extraire les données de ces deux colonnes (PropertyValue, PropertyName) et créer une table semblable à ceci:
First Name | Last Name | Email | Phone | City | Country
-------------------------------------------------------
| | | | |
Donc, je voulais savoir si je peux utiliser une instruction SQL pour faire cela, voici mon aller à elle:
SELECT FirstName = (SELECT PropertyValue FROM UserProfile WHERE PropertyDefinitionID = (SELECT PropertyDefinitionID WHERE PropertyName = 'first name')),
LastName = (SELECT PropertyValue FROM UserProfile WHERE PropertyDefinitionID = (SELECT PropertyDefinitionID WHERE PropertyName = 'last name')),
Email = (SELECT PropertyValue FROM UserProfile WHERE PropertyDefinitionID = (SELECT PropertyDefinitionID WHERE PropertyName = 'email'))
Mais cela ne fonctionne pas et quelque chose semble vraiment bizarre à ce sujet ... Quelqu'un sait comment prendre une colonne et afficher ses valeurs dans plusieurs colonnes différentes?
Pourquoi Quelqu'un at-il remanié cela? Qu'est-ce qui rend cette réponse meilleure que les autres? Je voudrais savoir si je peux choisir la meilleure réponse ... – Matt
Je ne sais pas, je voudrais essayer ceci et comparer la performance à ma solution. Je pense que vous constaterez que le mien fonctionne beaucoup mieux si la table est grande et que vous avez beaucoup de champs à construire (parce que cette solution utilise une jointure pour chaque champ). – automatic