gelöst SQL: 2 Zeilen zu einer zusammenfassen

Mitglied: philbo20

philbo20 (Level 1) - Jetzt verbinden

14.08.2014, aktualisiert 15.08.2014, 31144 Aufrufe, 11 Kommentare

Hallo zusammen,

ich habe eine SQL-Server 2008 DB, wo ich eine Tabelle mit drei Spalten habe:
Name, Berufswunsch1, Berufswunsch2

Nun ist meistens nur eine Zeile pro Name vorhanden, es ist entweder Berufswunsch1 ODER Berufswunsch2 gefüllt.
Es gibt aber auch einige Namen, die doppelt vorkommen, in der ersten Zeile ist Berufswunsch1 gefüllt, Berufswunsch2 = NULL, in der zweiten Zeile dann Berufswunsch1 = NULL, Berufswunsch2 gefüllt.

Ich würde in einer Abfrage diese gerne in einer Zeile ausgeben lassen, wenn zwei Berufswünsche angegeben sind, dann sollen dies von einem Komma getrennt ausgegeben werden.

Hat jemand eine Idee??

Gruß
Philipp
Mitglied: Gersen
14.08.2014 um 15:43 Uhr
Hallo,

denkbar vielleicht über die max-Funktion:

Ungetestet unter MSSQL...

Gruß,
Gersen
Bitte warten ..
Mitglied: LianenSchwinger
LÖSUNG 14.08.2014, aktualisiert 15.08.2014
Hallo Gersen,

da fehlt noch die GROUP BY Klausel.

G Jörg
Bitte warten ..
Mitglied: philbo20
14.08.2014 um 16:09 Uhr
Zitat von LianenSchwinger:

Hallo Gersen,

da fehlt noch die GROUP BY Klausel.


Hallo ihr beiden...

fast


Also, so klappt es schonmal, dass mir das Ergebnis in drei Spalten ausgegeben wird. Wenn ich allerdings ein Select name, max(berufswunsch1) + ', ' + max(berufswunsch2) versuche, um mir bei zwei Werten diese Kommagetrennt ausgeben zu lassen, dann habe ich fast überall nur NULL stehen.
In den Zeilen, wo beide Berufswünsche gefüllt waren, wird korrekt mit Komma getrennt, allerdings nicht dort, wo nur eine Spalte gefüllt und die andere NULL war.

Wieso??

Danke schonmal!
Bitte warten ..
Mitglied: LianenSchwinger
14.08.2014 um 16:33 Uhr
Hallo,

ganz einfach ein "irgendwas" + NULL = NULL

Was gefällt Dir an der 3 Spalten Lösung denn nicht?

G Jörg
Bitte warten ..
Mitglied: Biber
14.08.2014, aktualisiert 15.08.2014
Moin philbo20,

so in etwa (ungetestet):

[Edit] In ziemlich allen SQL-Dialekten werden Strings konkateniert mit " || " und Zahlen werden addiert mit "+".
Warum M$ nun die Strings mit "+"-Zeichen verkettet, ist mir unerfindlich. Wenn dir oder dem Server die " || " nicht gefallen, dann ändere die in Pluszeichen.
[/Edit]


Alternativ kannst du die NULL-Werte mit COALESCE() oder ISNULL() zu Wunschwerten umwandeln.

Das Statement funktioniert aber - unabhängig von NULL-Werten- auch nur unter den von dir vorgefundenen Gegebenheiten.
Sprich - es gibt keinen Fall, in dem für einen Namen mal mehrere "berufswunsch1" oder mehrere "berufswunsch2"-Felder gefüllt sind.

Falls also irgendein Depp eingegeben hat
Name="Depp", berufswunsch1="Millionär", berufswunsch2=NULL
Name="Depp", berufswunsch1="Zwiebelschäler", berufswunsch2="Fleckentferner"

--> dann fällt durch die MAX()-Aggregatfunktion der eigentlich sicherlich präferierte Berufswunsch ganz raus aus jeglichem Resultset.

Grüße
Biber
Bitte warten ..
Mitglied: philbo20
15.08.2014, aktualisiert um 08:11 Uhr
Danke euch!
ich habe es noch ein wenig angepasst, und hoffe nun alle eventualitäten abzufangen (beide Spalten sind nie Null, daher habe ich das nicht abgefragt).
So funktioniert das Ganze auf jeden Fall!

Ich muss es in 1 Spalte zusammenfassen, weil ich es so für die weitere Verwendung liefern muss.
Eigentlich hätte ich wahrscheinlich, um es sauber zu lösen, schon eine Ebene höher ansetzen müssen. Ich lasse mir die Werte aus einer Tabelle mittels SSIS in 2 nacheinander ausgeführten SQL-Abfragen (eine für Berufswunsch 1, eine für Berufswunsch2) in eine neue Tabelle schreiben. Allerdings müsste die zweite Abfrage ja eigentlich wenn der Name schon vorhanden ist, nur die Spalte Berufswunsch2 füllen, anstatt eine neue Zeile anzufügen. Das hab ich aber nicht hingekriegt...

also falls jemand weiß, wie ich das löse
Bitte warten ..
Mitglied: Biber
15.08.2014, aktualisiert um 09:41 Uhr
Moin philbo,

bei deiner Strategie kannst du das Statement mit der o.a. COALESCE-Funktion noch ewas schlanker gestalten:
Zu deiner neuen Frage:
Ich würde gar nicht erst zwei SQL-Statements gegen das SSIS schiessen, sondern nur eine Abfrage, die Berufswunsch1 und Berufswunsch2 holt.
Oder ist das nicht möglich mit den Abfragemöglichkeiten, die dir SSIS bietet?

Poste doch mal die beiden Statements (zumindest sinngemäß).

Grüße
Biber
Bitte warten ..
Mitglied: Gersen
15.08.2014, aktualisiert um 10:02 Uhr
Zitat von philbo20:
Eigentlich hätte ich wahrscheinlich, um es sauber zu lösen, schon eine Ebene höher ansetzen müssen. Ich lasse
mir die Werte aus einer Tabelle mittels SSIS in 2 nacheinander ausgeführten SQL-Abfragen (eine für Berufswunsch 1, eine
für Berufswunsch2) in eine neue Tabelle schreiben. Allerdings müsste die zweite Abfrage ja eigentlich wenn der Name
schon vorhanden ist, nur die Spalte Berufswunsch2 füllen, anstatt eine neue Zeile anzufügen. Das hab ich aber nicht
hingekriegt...

also falls jemand weiß, wie ich das löse

Dazu solltest Du Dir vielleicht mal das MERGE-Konstrukt anstelle von einfachen INSERTs anschauen.
Bitte warten ..
Mitglied: philbo20
15.08.2014 um 10:00 Uhr
Ja, wenn ich beide Statements in einer Abfrage unterbringen könnte, so dass die Ergebnisse in eine Zeile (bei gleichem Namen) geschrieben werden, wäre das natürlich Ideal...
also hier meine Abfragen:
und Abfrage 2:
vom Prinzip her sind beide identisch, der einzige Unterschied ist die Where-Bedingung in Bezug auf das Feld Stellentyp.
Bitte warten ..
Mitglied: Biber
LÖSUNG 15.08.2014, aktualisiert 18.08.2014
Moin philbo20,

dann würde ich einfach die beiden Statements in einem UNION ALL zusammenfassen (jeweils mit einem Dummywert für das nicht abgefragte Feld), danch nachmal aggregieren und fertsch.

Ich habe jetzt inhaltlich nicht weiter draufgeschaut, ob sich das evtl ohne UNION und mit einem Zugriff auf die tPersBewProf-Tabelle lösen liesse mit einer WHERE ( (.....baus-Bedingung) OR (aarb-Bedingung) ).

Kannst ja erstmal probieren, ob dieses Statement in endlicher Zeit fertig wird..

Grüße
Biber
Bitte warten ..
Mitglied: philbo20
18.08.2014 um 15:10 Uhr
Hi...
danke, hab es jetzt mit dem Union in der Abfrage gelöst und mache dann direkt danach ein Update, wo ich die beiden Werte dann kommagetrennt in ein drittes Feld schreiben lasse.

Gruß
Philipp
Bitte warten ..
Heiß diskutierte Inhalte
Hardware
Schwarmwissen gefragt: Rätselstunde am Samstag Abend - LWL Verkabelung
Xaero1982FrageHardware25 Kommentare

Nabend Zusammen, heute Abend gibt es ein kleines Rätsel für euch was es zu lösen gilt. Die Lösung werde ...

Netzwerke
Aufbau Praxisnetzwerk mit Fragen (TI, Switch, Firewall, VoIP, Netzwerkdesign)
razorrFrageNetzwerke21 Kommentare

Hallo, ich bin neu hier, aber habe hier schon sehr lange im Forum mitgelesen bzw. mich schlau gemacht und ...

Datenbanken
SQL Null Abfrage
gelöst newit1FrageDatenbanken18 Kommentare

Hallo zusammen, ich versuche eine CSV in meine Datenbank zu importieren. Das klappt auch. Die CSV hat folgendes Format: ...

Backup
Veeam Backup-Server aus der Domäne nehmen
redhorseFrageBackup15 Kommentare

Guten Morgen, da in unserer Backupumgebung ein Hardwaretausch ansteht, konzipiere ich gerade Möglichkeiten die Sicherheit zu erhöhen. Konkret geht ...

Vmware
ESXi für Raspberry Pi
sabinesInformationVmware15 Kommentare

VMware hat den ESXi für den Raspberry Pi (zu Testzwecken) vorgestellt, läuft 180 Tage auf dem Pi 4 mit ...

Windows Server
DHCP 2008r2 Umzug auf 2019 werden die Adress Leases nicht übernommen
gelöst TestmannFrageWindows Server11 Kommentare

Guten Morgen, ich habe folgendes Problem: Beim umziehen des DHCP Servers 2008r2 auf neue Win 2019 Maschine (VM) werden ...

Ähnliche Inhalte
Datenbanken
SQL 2 Werte abfragen, davon 1 berechnen
gelöst SolardubFrageDatenbanken5 Kommentare

Hi! Kann mir bitte jemand weiterhelfen? Ich möchte in einem SQL-Select die Menge von zwei verschiedenen Artikel zusammenzählen, wobei ...

Datenbanken
SQL ORDER BY und Join mit 2 Tabellen
gelöst DippsFrageDatenbanken7 Kommentare

Hallo an alle, ich versuche gerade eine Join mit 2 Tabellen auf zubauen und mir den letzten Datensatz Anzeigen ...

Windows Server

2016 Datacenter mit SQL 2016 Express - 2 Probleme

csaeumFrageWindows Server1 Kommentar

Hallo ich habe eine Batchdatei diese soll folgendes machen. Backup einer DB danach in die DB was importieren. Nun ...

Windows Server

Download LINK SQL Server 2016 Standard 2-Core

gelöst heax22FrageWindows Server7 Kommentare

Hallo Kollegen. Ich bin im Besitz einer SQL Server 2016 Standard 2-Core Lizenz. Leider verfüge ich aber nur über ...

Windows Server

SQL Server 2019 CU 2 Probleme mit dem Agent

sabinesInformationWindows Server

Das CU2 sorgt dafür, dass der SQL Agent nicht mehr richtig funktioniert. Wer also bspw. zeitgesteuerte Jobs eingerichtet hat, ...

Datenbanken

MS-SQL 2016 Standard: SQL Update mit 2 verknüpften Tabellen scheitert (Unterabfrage hat mehrere Werte)

gelöst chgs2011FrageDatenbanken13 Kommentare

Hallo, ich scheitere leider an meinem Update-Befehl und suche dringend Tipps. Ich habe 2 Tabellen, eine Tabelle für Kundeninfos ...

Neue Fragen
Administrator Magazin
11 | 2020 Virtualisierung ist aus der IT nicht mehr wegzudenken. In der November-Ausgabe des IT-Administrator Magazins dreht sich der Schwerpunkt um das Thema "Server- und Storage-Virtualisierung". Darin erfahren Sie, wie sich die Virtualisierungstechnologie entwickelt hat, welche Varianten es im Bereich Server und Speicher gibt und wie ...
Neue Beiträge
Neue Jobangebote
Server- und Storage-VirtualisierungServer- und Storage-VirtualisierungBerechtigungs- und IdentitätsmanagementBerechtigungs- und IdentitätsmanagementWebdienste und -serverWebdienste und -serverDatenbankenDatenbankenMonitoring & SupportMonitoring & SupportHybrid CloudHybrid Cloud