Mehrere Spalten über eine Abfrage in einer Zugriffsdatenbank zu einer Spalte zusammenführen

77537
crazybmanp

Ich muss eine Abfrage schreiben, die mehrere Textspalten kombiniert.

Meine Datenbank ist eine Datenbank mit Hintergrundbildern auf meinem Computer (ich benutze Johns Hintergrundumschalter), sodass ich sie leicht finden und kategorisieren kann.

Jeder Datensatz hat 4 Zeichenfelder (ich dachte, es war einfacher, dies als einen Tag-Stil zu tun.) Ich brauche eine Abfrage, um diese zusammenzuführen, so dass alle Zeichen aus allen 4 verschiedenen Feldern in einer Spalte sind, also nicht in einem Feld. Bitte denken Sie daran, dass einige der Zeichenfelder leer sind.

Falls es einen einfacheren Weg gibt, benachrichtigen Sie mich bitte.

Hier ist ein Beispiel von dem, was ich will:

(table) col1|col2|col3  x |y |z  c | |   (query output)  outputcol  x  y z  c 
3
Ich weiß, dass Sie es mit "Zugriff" markiert haben, aber es wäre schön, wenn Sie erwähnen, dass dies die Datenbank ist, die Sie im Fragentext verwenden. wfaulk vor 14 Jahren 1

3 Antworten auf die Frage

1
pipTheGeek

@A Dwarf, SELECT Column1 + Column2 + Column3funktioniert, solange alle Spalten aus Text bestehen und nicht null sind.

||ist der Verkettungsoperator für Oracle. Für Access ist es &.

Eine bessere Aussage wäre also

SELECT Column1 & Column2 & Column3 as NewColumn FROM MyTable 

Wenn Sie den Raumseparator wünschen, wird dies natürlich

SELECT Column1 & " " & Column2 & " " & Column3 as NewColumn FROM MyTable 

Der &Operator behandelt Nullwerte als leere Zeichenfolge.

Wenn Sie nicht möchten, dass die zusätzlichen Leerzeichen angezeigt werden, können Sie so etwas wie verwenden

SELECT Nz([Column1] + " ","") & Nz([Column2] + " ","") & [Column3] 

BEARBEITEN: Wenn Sie auch die ursprünglichen separaten Spalten sowie die verknüpfte Version einfügen möchten, listen Sie sie einfach auf, z.

SELECT Column1 & " " & Column2 & " " & Column3 as NewColumn, Column1, Column2, Column3 FROM MyTable 

BEARBEITEN nach dem Lesen der Beispielausgabe des OP.

Es scheint, dass wir alle genau das tun, was das OP wollte. Um das zu erreichen, was Sie in dem von Ihnen gezeigten Beispiel verlangen, brauchen Sie.

SELECT Column1 FROM MyTable WHERE Column1 Is Not Null and Column1<>""  UNION ALL  SELECT Column2 FROM MyTable WHERE Column2 Is Not Null and Column2<>""  UNION ALL  SELECT Column3 FROM MyTable WHERE Column3 Is Not Null and Column3<>""  

Wenn Sie Duplikate entfernen möchten, müssen Sie nur das Wort entfernen ALL, damit Sie es erhalten

SELECT Column1 FROM MyTable WHERE Column1 Is Not Null and Column1<>""  UNION  SELECT Column2 FROM MyTable WHERE Column2 Is Not Null and Column2<>""  UNION  SELECT Column3 FROM MyTable WHERE Column3 Is Not Null and Column3<>""  

Natürlich können Sie das beliebig UNION SELECT...oft wiederholen .

+1. Tatsächlich. Vielleicht möchten Sie eine WHERE-Klausel einschließen, um Nullwerte zu entfernen, wenn diese in den Spalten erwartet werden. A Dwarf vor 14 Jahren 0
Ich nahm an, dass nicht alle Spalten für einen einzelnen Datensatz null sein würden, sodass Sie sie wahrscheinlich nicht aus den Ergebnissen ausschließen möchten. pipTheGeek vor 14 Jahren 0
Und Sie haben wahrscheinlich richtig angenommen. Der Punkt ist jedoch, wenn dies nicht der Fall ist, möchte man eine where-Klausel verwenden, die auf null prüft. A Dwarf vor 14 Jahren 0
das funktioniert meistens, es enthält einige leere Datensätze und einige Wiederholungen, aber ich kann das dankeschön reparieren. crazybmanp vor 14 Jahren 0
Eigentlich, warte, das fügt nur die Zeichenfolgen zusammen, jedes andere Feld benötigt einen eigenen Datensatz in der Abfrage. crazybmanp vor 14 Jahren 0
Ich denke, Sie meinen, jedes Feld benötigt eine eigene Spalte in der Abfrage sowie die verkettete. Ich habe meine Antwort aktualisiert, um zu zeigen, wie das geht. pipTheGeek vor 14 Jahren 0
Nachdem ich Ihren bearbeiteten Beitrag gelesen habe, verstehe ich jetzt, was Sie wollen. Ich habe meiner Antwort eine weitere Bearbeitung hinzugefügt. Entschuldigung wegen des Missverständnisses. pipTheGeek vor 14 Jahren 0
1
hyperslug

Vielleicht das?

SELECT col1 FROM table UNION SELECT col2 FROM table UNION SELECT col3 FROM table UNION SELECT col4 FROM table 

UNIONVerbindet nur bestimmte Werte (wenn Sie 4 't'-Werte haben, wird nur einer gesetzt). UNION ALLspeichert Duplikate.

0
A Dwarf
SELECT (Column1 + Column2 + Column3 + Column4) FROM YourTable 

Das obige wird alle vier Spalten verketten. Wenn Sie ein Leerzeichen als Trennzeichen benötigen:

SELECT (Column1 + " " + Column2 + " " + Column3 + " " + Column4) FROM YourTable 

Das Pluszeichen arbeitet also als Verkettungsprogramm. Wenn Sie schließlich die resultierende Spalte benennen müssen:

SELECT (Column1 + Column2 + Column3 + Column4) AS ColumnName FROM YourTable 

Eine letzte Anmerkung, seit ich zuletzt an Access gearbeitet habe, ist es mir aber auch möglich, Felder mit dem || zu verketten Operator:

SELECT (Column1||Column2||Column3||Column4) FROM YourTable 

Nach den Kommentaren zu dieser Antwort können verschiedene Datenbankmodule unterschiedliche Syntax bereitstellen. Ein Ärger, kein Zweifel:

SELECT Column1 & Column2 & Column3 & Column4 FROM YourTable 

Hier haben wir '+' durch das in vielen Windows-Anwendungen vorhandene '&' Verkettungssymbol ersetzt.

Prost

Aus irgendeinem Grund ergibt dies eine Tabelle voller leerer Werte, die der Anzahl der Datensätze in der ersten Tabelle entspricht. crazybmanp vor 14 Jahren 0
errm ... haben Sie Column1, Column2 usw. durch die tatsächlichen Spaltennamen ersetzt? Entschuldigung, ich weiß, es ist eine grundlegende Frage, aber ich kann nicht verstehen, warum Sie leere Werte erhalten A Dwarf vor 14 Jahren 0
Ja, ich habe alle Tags ersetzt. Alle Spalten der Spaltenname und Ihre Tabelle crazybmanp vor 14 Jahren 0
OK. Meine Antwort bearbeiten, um andere Möglichkeiten einzuschließen. Ein Moment... A Dwarf vor 14 Jahren 0