J'ai cette colonne 'Tests' avec n lignes
Column New1: Test0 Test3 Column New2: Test1 Test5 Column New3: Test2 Test8
Je dois séparer chaque valeur par un point-virgule et créer 1 colonne pour chaque index. p >
Ce devrait être le résultat:
1 Test0;Test1;Test2 2 Test3;Test5;Test8 ... ...
3 Réponses :
Je pense que c'est probablement assez proche de ce que vous voulez:
select t.*, s.*
from t cross apply
(select max(case when seqnum = 1 then s.value end) as test_1,
max(case when seqnum = 2 then s.value end) as test_2,
max(case when seqnum = 3 then s.value end) as test_3
from (select s.value,
row_number() over (order by charindex(';' + s.value + ';', ';' + t.tests + ';')) as seqnum
from string_split(t.tests, ';') s
) s
) s;
Voici un violon db .
Remarque: Cette approche ne fonctionnera pas s'il y a des doublons dans la colonne.
J'ai du mal à faire des doublons dans la colonne .. Ils ne sont pas correctement en ordre ...
Résolu ici Comment diviser une colonne en deux colonnes dans SQL Server
(Remarque: cette approche est conçue pour diviser une colonne en deux colonnes)
declare @t table (id int, name varchar(50))
select
case when CHARINDEX(';', Column)>0
then SUBSTRING(Column, 1, CHARINDEX(';', Column)-1)
else Column end Column1,
CASE WHEN CHARINDEX(';', Column)>0
THEN SUBSTRING(Column, CHARINDEX(';',Column)+1,len(Column))
ELSE NULL END as Column2
from @t
Essayez ceci
select SUBSTRING(Tests,1,CHARINDEX(';', Tests)-1) as New1,
SUBSTRING(Tests,CHARINDEX(';', Tests)+1,CHARINDEX(';', Tests,CHARINDEX(';', Tests)-1)-1) as New2,
SUBSTRING(Tests,CHARINDEX(';', Tests,CHARINDEX(';', Tests)+1)+1,len(Tests)) as New3
Quelle est la version de SQL Server et la colonne
Testscontient-elle toujours du texte en 3 parties? Merci.