Wie in den Kommentaren erwähnt, könnte es für Sie einfacher sein, es am Frontend zu tun, aber es könnte auch in SQL Server getan werden.
Partial Rextester Demo
Ich habe Ihr ganzes Szenario nicht replizieren, sondern hätte es für 2 Spalten. Um dies zu tun, benötigen Sie für jede Zeile eine eindeutige Kennung. Ich verwende eine Sequenznummer (1,2,3 ...).
Jetzt beziehen Sie sich auf answer, die rekursive Unterabfrage verwendet, um csv in Zeilen zu teilen. Dann habe ich XML PATH
verwendet, um die Spalten zurück in CSV zu ändern.
Dies ist die Abfrage, die es für OLD SPC
und OLD FREQ
tut.
;with tmp(SEQ,OldSPCItem,OldSPC,OLD_FREQ_item,OLD_FREQ) as (
select SEQ, LEFT(OldSPC, CHARINDEX(',',OldSPC+',')-1),
STUFF(OldSPC, 1, CHARINDEX(',',OldSPC+','), ''),
LEFT(OLD_FREQ, CHARINDEX(',',OLD_FREQ+',')-1),
STUFF(OLD_FREQ, 1, CHARINDEX(',',OLD_FREQ+','), '')
from table1
union all
select SEQ, LEFT(OldSPC, CHARINDEX(',',OldSPC+',')-1),
STUFF(OldSPC, 1, CHARINDEX(',',OldSPC+','), ''),
LEFT(OLD_FREQ, CHARINDEX(',',OLD_FREQ+',')-1),
STUFF(OLD_FREQ, 1, CHARINDEX(',',OLD_FREQ+','), '')
from tmp
where OldSPC > ''
)
select seq,STUFF((SELECT ',' + CONCAT(OldSPCItem,'/',OLD_FREQ_item) FROM TMP I
WHERE I.seq = O.seq FOR XML PATH('')),1,1,'') OLD_SPC_OLD_FREQ
from tmp O
GROUP BY seq
;
Es wird Ihnen diese Ausgabe
+-----+------------------+
| seq | OLD_SPC_OLD_FREQ |
+-----+------------------+
| 1 | ADH/7,BAP/9 |
| 2 | NOT REQ/NOT REQ |
+-----+------------------+
Was müssen Sie tun jetzt - Finden Sie eine Möglichkeit, eine Sequenznummer zu erzeugen, um jede Zeile eindeutig zu identifizieren. Wenn Sie eine Spalte verwenden können, verwenden Sie diese anstelle von SEQ
.
hinzufügen In ähnlicher Logik für NEW_SPC
und NEW_FREQ
. (Kopieren Sie einfach einfügen LEFT
und STUFF
wie in OLD_FREQ
und es für NEW_SPC
und NEW_FREQ
ändern.
mehr NOT REQ/
mit ''
ersetzen, so dass Sie nur einem NOT REQ
bekommen. Sie tun es mit replace
Funktion.
Wenn Sie dabei auf ein Problem/Fehler stoßen, fügen Sie es der Rexterster Demo hinzu und teilen Sie die URL, wir werden das überprüfen.
ich denke, das wird besser in Ihrem Backend getan werden. –
Ich mache das im Backend (SQL Server) –
ich meine, C#, PHP usw. oder welche Sprache Sie verwenden. –