[FIXED] Wie man Zeichenfolgen in Spalten in Zeilen aufteilt (in zwei Zeilen, die mit der Position übereinstimmen) SQL

Ausgabe

Ok, los geht’s. Mein allererster Beitrag und Frage.

Ich verwende SQL Server 2019. Ich habe eine Tabelle, die an zwei Spalten aus dieser Tabelle interessiert ist.

Beide Spalten enthalten Array-ähnliche Daten (beide sind eine Reihe von Zeichenfolgen, die durch Kommas getrennt sind. Ich möchte jede Teilzeichenfolge aus den Spalten nehmen und sie allein in ihrer eigenen “Zelle” anzeigen und stattdessen viele Zeilen haben.

Jetzt kann ich es mit STRING_SPLIT mit einer der Spalten zum Laufen bringen. Wenn ich jedoch String Split für beide Spalten verwende, bekomme ich nicht die Reihenfolge, die ich brauche. dh zum Beispiel siehe unten

column1: 'my_fav_drink','my_fav_colour','my_fav_avenger'

column2: 'coffee','blue','dr_strange'

Die Position der Zeichenfolgen wird immer übereinstimmen, sodass sich der 3. Eintrag in Spalte 1 immer auf den 3. Eintrag in Spalte 2 bezieht.

Aber wenn ich den String-Split durchführe, werden die Befehle durcheinander gebracht

Ich habe Self Joins, Sub Selects und Herumspielen mit Order By ausprobiert, aber ich kann es einfach nicht in Ordnung bringen.

Ich habe eine Weile online gesucht, also komme ich nicht einfach in die Community, ohne es vorher zu versuchen, und ich freue mich über jede Hilfe oder Anleitung, und ich habe natürlich hier nach der Antwort gesucht, aber ich hatte kein Glück.

Update: Bitte beachten Sie Folgendes:

  1. Das wurde nicht von mir gebaut, ich tauche ein, ohne dass eine technische Spezifikation durch die DB gehen muss, ich bin sicher, einige von Ihnen werden meinen Schmerz kennen. Wenn ich die Genehmigung bekomme, werde ich das neu gestalten, aber ich kann es vorerst nicht (ich könnte aber eine andere Tabelle machen). Die Daten kommen automatisch von einer Maschine wie dieser als Liste von Zeichenketten herein

  2. Es gibt etwa 50 Werte in jeder Spalte

Gewünschte Ausgabe ist:

gewünschte_Ausgabe_Tabelle

Der springende Punkt dabei ist, dass ich Analysen in einer anderen Software durchführen kann (wiederum eine Anfrage), aber das Array kann in der Software nicht aussortiert werden.

Danke Leute,

Sehr geschätzt

Lösung

Die wahrscheinlich beste Lösung besteht darin, das Design zu ändern, aber wenn Sie die Eingabedaten parsen müssen, können Sie einen JSON-basierten Ansatz ausprobieren. Die Idee besteht darin, die Werte von column1und column2Spalten in gültige JSON-Arrays ( my_fav_drink, my_fav_colour, my_fav_avengerinto ["my_fav_drink", "my_fav_colour", "my_fav_avenger"]) umzuwandeln und die Arrays mithilfe eines OPENJSON()Standardschemas zu analysieren. Das Ergebnis der OPENJSON()Ausführung ist eine Tabelle mit den Spalten keyund valueund typedie Werte in der keySpalte sind die Indizes der Elemente im Eingabearray.

Tisch:

CREATE TABLE Data (
   column1 varchar(100),
   column2 varchar(100)
)
INSERT INTO Data (column1, column2)
VALUES ('my_fav_drink,my_fav_colour,my_fav_avenger', 'coffee,blue,dr_strange')

Aussage:

SELECT CONVERT(int, j1.[key]) + 1 AS [Number], j1.[value] AS [Label], j2.[value] AS [Value]
FROM Data d
CROSS APPLY OPENJSON(CONCAT('["', REPLACE(STRING_ESCAPE(d.column1, 'json'), ',', '","'), '"]')) j1
CROSS APPLY OPENJSON(CONCAT('["', REPLACE(STRING_ESCAPE(d.column2, 'json'), ',', '","'), '"]')) j2
WHERE j1.[key] = j2.[key]

Ergebnis:

Number  Label           Value
1       my_fav_drink    coffee
2       my_fav_colour   blue
3       my_fav_avenger  dr_strange


Beantwortet von –
Zhorov


Antwort geprüft von –
Clifford M. (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like