J'ai une colonne de chaîne dans Mon problème consiste à extraire toutes les couples de la clé et de la valeur et de les stocker dans des colonnes séparées avec la clé comme en-tête de colonne. Ce qui rend ce stimulant, c'est que chaque enregistrement a un nombre différent de Par exemple dans l'image ci-dessous montrant 3 enregistrements, le premier enregistrement a 5 paires de clé / valeur - si j'ai Pour montrer comment je veux cela dans Excel, ce serait comme: p> J'ai vu des exemples de code SQL qui fait quelque chose de similaire Mais pour un nombre fixe de colonnes, contrairement à celui-ci, il varie pour chaque enregistrement. P> Veuillez j'ai besoin d'une instruction SQL pouvant y parvenir, car je travaille sur des milliers d'enregistrements. P> Voici ces données copiées depuis SQL Server code> qui stocke des données code> JSON code> avec tous les accolades et tous les colons inclus. clé / valeur code> paires. P> endusecommunitymarket de 2 code>, MARCHE DE 0 CODE>, etc. Le deuxième enregistrement a 1 paire de clé / valeur et que la troisième enregistrement a deux paires de clé / valeur. P> SQL Server code>: p>
3 Réponses :
Je pense que vous ne voulez pas créer de manière dynamique une table, vous souhaitez probablement créer une table de mappage de propriétés. Voici un aperçu rapide de la conception.
OBJECT ID NAME 1 WHAOO 2 RED SNAMPPER 3 KAWAKAWA Property Types ID DESC 1 EndUseCommunityMarket 2 EndUseProvincialMarket 3 EndUseUrbanMarket 4 EndUseEaten 5 EndUseGivenAway 6 Comment Map ObjID TypeID Value 1 1 2 1 2 0 1 3 0 1 4 0 1 5 0 2 2 50 3 3 8 3 5 1
Je ne veux pas créer de tables à partir de la conception, tout ce que je veux, c'est une SQL qui interroge cette table et transformer les données dans cette colonne spécifique (Catch_ext) en les plaçant dans des colonnes séparées nommées d'après les noms de clés. Par exemple, des données que je viens d'ajouter à ma question ci-dessus, les noms de colonnes seraient enduseaten, marquage endusecommunity, espèces Quelque chose comme l'image Excel a également montré dans ma question.
Je comprends ce que vous voulez - je suggère que c'est la meilleure façon de le faire. Esp. Si vous n'avez pas de nombre maximum de colonnes (que vous n'avez pas fait quand j'ai écrit cette réponse.) Si vous avez un nombre maximal de colonnes - il n'est pas dynamique. Ensuite, il est beaucoup plus facile.
Les colonnes dynamiques sont beaucoup comme des lignes. P>
Vous pouvez utiliser sortie p> openjson (transact-sql) code> vos entrées h1>
sortie H2>
SELECT store.title, location.street, location.lat, location.long
FROM store
CROSS APPLY OPENJSON(store.jsonCol, 'lax $.location')
WITH (
street varchar(500),
postcode varchar(500) '$.postcode',
lon int '$.geo.longitude',
lat int '$.geo.latitude'
) AS location
Essayez ceci:
sp_name EndUseCommunityMarket EndUseProvincialMarket EndUseUrbanMarket EndUseEaten EndUseGivenAway
------------- --------------------- ---------------------- ----------------- ----------- ---------------
KAWAKAWA 2
RUBY SNAPPER 3
WAHOO 1
XXXXXXXX 31
YYYYYYYY 0 0 8 1 1
ZZZZZZZZZZ 18
Êtes-vous capable de dire, quel est le nombre maximum de colonnes d'une seule valeur JSON possible?
Quelques astuces: ne postez pas de photos. Mieux vaut coller les données, ce qui nous permet de reprendre cela dans un environnement de test avec copier et coller i>. Personne ne veut taper cela dans. Le meilleur était un exemple de reproductible minimal . Et veuillez ajouter votre version de SQL Server. Le support JSON a été ajouté non avant V2016. Ma suggestion: fournir aux exemples de JSON pour voir votre problème en principe. Trouver une solution pour deux vous aidera à trouver une solution pour beaucoup.
@Dineshdb Il peut y avoir au plus 6 paires de clé / valeur pour 6 colonnes
@Shnugo J'ai ajouté des données SQL SQL RAW à la fin de ma question ci-dessus pour vous permettre de copier et de coller dans un environnement de test.
@Eloga, quelle version de SQL Server vous utilisez?