2017-12-05 1 views
0

Dies ist mein erstes Mal eine Frage, so bitte bitte mit mir für alle Fehler. Ich versuche, die numerischen Werte mit einem Trennzeichen von ';' Verwendung von SQL in separate Spalten, war ich in der Lage Splitting einen Teil davon zu erreichen, den Code unten verwenden, aber ich werde den Rest davon in Spalte 3 zu separaten Spalten ich eine Tabelle wie dieseSplit-Dateien mit SQL

ID catalogNumber STEPID1 
---------------------------- 
815326 FBRS415 499023;499027;726203 
habe aufzuspalten gefallen
with tmp(catalognumber,stepid1_split,stepid1) as (
select catalognumber,cast(LEFT(stepid1, CHARINDEX(';',stepid1+';')-1) as varchar),cast(STUFF(stepid1, 1, CHARINDEX(';',stepid1+';'), '') as varchar) 
from EXACT_MATCH 
union all 
select catalognumber, cast(LEFT(stepid1, CHARINDEX(';',stepid1+';')-1) as varchar), cast(STUFF(stepid1, 1, CHARINDEX(';',stepid1+';'), '') as varchar) 
from tmp 
where stepid1> '' 
) 
select * 
from tmp 
ID  catalogNumber STEPID1 STEPID2 STEPID3 
--------------------------------------------------- 
815326 FBRS415   499023  499027  726203 
+0

SQLServer 2014 – okla

Antwort

0

Dafür könnten Sie XML .. .node() Methode versuchen, Ihre Komma Werte in einzelne Spalten zu teilen beachten Sie, dass dies gibt Ihnen immer drei Säulen.

Sie müssen einige zusätzliche Spalten hinzufügen, um durch Komma getrennte Werte angezeigt werden, wie Sie

select distinct 
     a.ID, 
     a.catalogNumber, 
     c.value('/m[1]', 'varchar(max)') [STEPID1], 
     c.value('/m[2]', 'varchar(max)') [STEPID2], 
     c.value('/m[3]', 'varchar(max)') [STEPID3] from 
(
    select ID , catalogNumber , cast('<m>'+replace(STEPID1, ';', '</m><m>')+'</m>' as xml) [STEPID1] from <table> 
) a cross apply STEPID1.nodes ('/m') as STEPID1(c) 

Ergebnis definieren:

ID  catalogNumber STEPID1 STEPID2 STEPID3 
815326 FBRS415   499023 499027 726203 
+0

wie ein Charme, danke für alle Ihre Hilfe, ich bin sehr dankbar – okla