Split colonne à plusieurs lignes
J'ai une table avec une colonne qui contient plusieurs valeurs séparées par des virgules (,) et split-il si je reçois chaque Site sur sa propre ligne, mais avec le même Nombre en face.
Donc mon select à partir de cette entrée
table Sitetable
Number Site
952240 2-78,2-89
952423 2-78,2-83,8-34
Créer cette sortie
Number Site
952240 2-78
952240 2-89
952423 2-78
952423 2-83
952423 8-34
J'ai trouvé quelque chose qui me semblait mais nan..
select Number, substr(
Site,
instr(','||Site,',',1,seq),
instr(','||Site||',',',',1,seq+1) - instr(','||Site,',',1,seq)-1) Site
from Sitetable,(select level seq from dual connect by level <= 100) seqgen
where instr(','||Site,',',1,seq+1) > 0
Edit2: je vois que j'ai effectivement eu une partie active, sélectionnez tout le temps (j'étais une merde testeur :(), ci-dessus, on fonctionne, mais le seul problème est qu'il perd la dernière valeur du Site, mais vais essayer de travailler un peu sur ce point..
Edit3: Maintenant son travail
select Number, substr(
Site,
instr(','||Site,',',1,seq),
instr(','||Site||',',',',1,seq+1) - instr(','||Site,',',1,seq)-1) Site
from Sitetable,(select level seq from dual connect by level <= 100) seqgen
where instr(','||Site,',',1,seq) > 0
double possible de requête SQL pour traduire une liste de numéros identiques à l'encontre de plusieurs plages, à une liste de valeurs
Découvrez ma réponse à l'autre post, j'ai identifié comme un possible double. C'est un 10g solution à votre problème.
Je crois que j'ai mon sélectionnez travailler un peu mieux maintenant
est-il un moyen de le faire dans SQL Server 2008??
Découvrez ma réponse à l'autre post, j'ai identifié comme un possible double. C'est un 10g solution à votre problème.
Je crois que j'ai mon sélectionnez travailler un peu mieux maintenant
est-il un moyen de le faire dans SQL Server 2008??
OriginalL'auteur Balroq | 2010-09-14
Vous devez vous connecter pour publier un commentaire.
Et la bonne réponse est.
OriginalL'auteur Balroq
Avez-vous Essayez de Michael Sofaer, en réponse à Comment mieux split csv chaînes dans oracle 9i
number
colonne...OriginalL'auteur Conrad Frix
------------Créer Tableau De Résultat-------------------------------------------
create table resulTable(
cnombre de grains nombre,
Site varchar2(1000)
);
------------Créer Splitter Procédure--------------------------------------
/Ici, j'ai remplacé les chiffres par exemple: 2-78 par s2ss78s pour l'utilisation
DBMS_UTILITY.comma_to_table(il ne fonctionne pas sur les chiffres)/
create or replace procedure split_list_to_rows(num nombre,plist varchar2)
ptablen BINARY_INTEGER;
ptab DBMS_UTILITY.uncl_array;
commencer
DBMS_UTILITY.comma_to_table (
liste => replace(replace(CONCAT('s', plist),',',',s'),'-','ss'),
tablen => ptablen,
tab => ptab);
FOR i IN 1 .. ptablen BOUCLE
insérer DANS resulTable VALEURS (num,remplacer(ltrim(ptab(i),'s'),'ss','-'));
FIN DE LA BOUCLE;
FIN;
------------PL/SQL Bloc À Exécuter la Procédure Pour Chaque Ligne-------------------
commencer
for i in (select cnombre de grains,Site de Sitetable)
boucle
split_list_to_rows(j'.cnombre de grains,j'.Site);
fin de la boucle;
fin;
------------------------Voir Le Résultat---------------------------------------
sélectionnez * à partir de resulTable;
OriginalL'auteur kupa
Je pense que vous avez une limite maximale de 100 valeurs séparées par des virgules qui est inutile, mais probablement pas nuisibles dans votre cas.
au lieu de
cela devrait fonctionner pour un certain nombre de valeurs (niveau limité par le nombre max de virgules présent).
OriginalL'auteur lokori