Précédemment quelqu'un a posé des questions sur Turning a Comma Separated string into individual rows. Cela fonctionne très bien pour une colonne, mais j'ai une question d'extension. Que faire si je veux diviser deux (ou plusieurs) colonnes associées. Autrement dit, si j'ai des données comme celle-ci (en utilisant les données du poste précédent comme base):Transformation de chaînes séparées par des virgules en lignes individuelles avec plusieurs colonnes
| SomeID | OtherID | Data | RelatedData |
+----------------+-------------+-----------+-------------+
| abcdef-..... | cdef123-... | 18,20,22 | xxx,,yyy |
| abcdef-..... | 4554a24-... | 17,19 | a,bb |
| 987654-..... | 12324a2-... | 13,19,20 | r,s,t |
et que vous voulez retourner les lignes comme les suivantes:
| SomeID | OtherID | Data | RelatedData |
+----------------+-------------+------+-------------+
| abcdef-..... | cdef123-... | 18 | xxx |
| abcdef-..... | cdef123-... | 20 | |
| abcdef-..... | cdef123-... | 22 | yyy |
| abcdef-..... | 4554a24-... | 17 | a |
| abcdef-..... | 4554a24-... | 19 | bb |
| ... | ... | ... | ... |
J'espérais utiliser STRING_SPLIT en raison de sa simplicité, mais je ne peux pas trouver un moyen de le faire fonctionner. Cela ne fonctionne pas:
select OtherID, cs1.Value, cs2.Value
from yourtable
cross apply STRING_SPLIT (Data, ',') cs1
cross apply STRING_SPLIT (RelatedData, ',') cs2
Des suggestions?
'ROW_NUMBER()', 'JOIN', puis' CROSS APPLY'. –
Temps pour re-concevoir la base de données - c'est la vraie réponse. –
Alternativement, si les gens ne peuvent pas être persuadés de normaliser leurs données, envisager JSON. Stocker ensemble des données reliées simplifierait grandement ces problèmes. Sauter à travers les colonnes "liées" est très gênant, peu importe comment vous le découpez. –