Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

mehrere SQL Ergebnisse in einer Spalte ausgeben

Frage Entwicklung Datenbanken

Mitglied: Saschbert

Saschbert (Level 1) - Jetzt verbinden

05.06.2008, aktualisiert 21:37 Uhr, 15538 Aufrufe, 8 Kommentare

Hallo Community,

benötige mal kurz Eure Hilfe. Ich bin gerade dabei, eine kleine Auswertung zu erstellen, und habe dabei einen Problemfall. Und mir fällt ums verrecken keine Möglichkeit ein. Wahrscheinlich ginge es mit einem Cursor oder so, aber mit Cursorn habe ich mich noch nicht beschäftigt.

System:
MS SQL 2005 Server

Hintergrund:
Ich habe eine recht komplexe, aber strukturierte Datenbank, in der Tabellen i.d.R. über eindeutige Kriterien zugeordnet sind, entweder in 1:1 oder 1:n Beziehungen.

Problem:
Ich habe zwei Tabellen, mit einem 1:n Verhältnis. Nun muss ich in einer Abfrage quasi eine Ausgabe erhalten, in der mir in Spalte 1 der eindeutige Index, der beide Tabellen verbindet, angezeigt wird, und in Spalte 2 möchte ich quasi ein Teilergebnis aus der zweite Tabelle erhalten, jedoch Kommagetrennt. Dies können maximal 4 sein, in meinem Modell, daher tragbar.

Beispiel:

Tabelle A

Id | Name
01 | ABCD
02 | EFGH
03 | IJKL


Tabelle B

Id | IdTabA | Wert
01 | 01 | 502001
02 | 01 | 502002
03 | 02 | 502000
04 | 03 | 502000
05 | 03 | 502002
06 | 03 | 500000


Ausgabe:

Name | Werte
ABCD | 502001, 502002
EFGH | 502000
IJKL | 502000, 502002, 500000


Ich hoffe, Ihr versteht, was ich meine. Die eigentliche Abfrage ist wesentlich komplizierter, aber das bekomme ich hin. Es ist nur diese eine Stelle, die ich hier mal vereinfacht skizzierte, die mir die Sorgenfalten auf die Stirn treibt.

Vielen Dank schon vorab,
Saschbert
Mitglied: bytecounter
05.06.2008 um 12:37 Uhr
Hallo,

ich würde das ganz einfach mit einem "inner join" erledigen.

http://www.sql-tutorial.net/SQL-JOIN.asp

vg Bytecounter
Bitte warten ..
Mitglied: Logan000
05.06.2008 um 13:20 Uhr
Die Anzahl der Ergebnisdatensätze beim Join währe (in diesem Bsp.) gleich der Anzahl der DS in Tabelle B.
Ich denke Saschbert möchte nur so viele DS wie in Tabelle A bekommen.
Und ich denke er hat recht. Das wird ohne Cursor nix.

@Saschbert
So schlimm sind Cursor nicht. http://msdn.microsoft.com/de-de/library/ms190028.aspx
Bitte warten ..
Mitglied: Saschbert
05.06.2008 um 13:25 Uhr
Vielen Dank erstmal. Aber ich glaube, Du hast das Problem nicht erkannt. Durch einen einfachen Join wäre die Ausgabe folgendermaßen:

Name | Werte
ABCD | 502001
ABCD | 502002
EFGH | 502000
IJKL | 502000
IJKL | 502002
IJKL | 500000

Was ich suche, ist jedoch eine Möglichkeit, quasi direkt im Resultset die Werte aus Tabelle B Kommagetrennt in einer Spalte zu erhalten. Und dabei hilft mir auch kein InnerJoin, bin ich der Meinung.
Bitte warten ..
Mitglied: Saschbert
05.06.2008 um 13:29 Uhr
Vielen Dank Logan00!

Aber Du machst mir Angst
Diese Artikel habe ich auch schon gefunden, aber nicht viel mit anfangen können. Wie dem auch seit, ich muss wohl in den sauren Apfel beißen, und mich in die Cursorproblematik einarbeiten.
Bitte warten ..
Mitglied: Logan000
05.06.2008 um 14:20 Uhr
So schlimm ist das auch nicht.

Hier hast Du mal eine Arbeitsgrundlage:
01.
CREATE TABLE #t (name Varchar(4), Wert varchar(50)) 
02.
DECLARE @ID varchar(2) 
03.
DECLARE @NAME varchar(4) 
04.
DECLARE @WERT varchar(50) 
05.
DECLARE @RESULT varchar(100) 
06.
DECLARE Name_cursor CURSOR FOR SELECT ID, Name FROM Table_1  
07.
OPEN Name_cursor 
08.
FETCH NEXT FROM Name_cursor INTO @ID , @NAME 
09.
SET @RESULT = '' 
10.
WHILE @@FETCH_STATUS = 0 
11.
BEGIN 
12.
	DECLARE Wert_cursor CURSOR FOR SELECT Wert FROM Table_2 WHERE IDTab1 = @ID 
13.
	Open Wert_cursor 
14.
	FETCH NEXT FROM Wert_cursor INTO @Wert 
15.
	WHILE @@FETCH_STATUS = 0 
16.
	BEGIN 
17.
		SET @RESULT = @RESULT + @Wert + ', ' 
18.
		FETCH NEXT FROM Wert_cursor INTO @Wert 
19.
	END 
20.
	INSERT INTO #t (name,wert) VALUES (@NAME,@RESULT) 
21.
	SET @RESULT ='' 
22.
	CLOSE Wert_cursor 
23.
	DEALLOCATE Wert_cursor 
24.
	FETCH NEXT FROM Name_cursor INTO @ID , @NAME 
25.
END 
26.
CLOSE Name_cursor 
27.
DEALLOCATE Name_cursor 
28.
SELECT * FROM #t 
29.
DROP TABLE #t 
30.
GO
Table_1 ist deine Tabelle A und Table_2 Tabelle B aus deinen Bsp.
Die Performance wird nicht so dolle sein.
Das sind 2 geschachtelte Cursor. Daher kann die Ausführung bei sehr vielen DS etwas dauern.
Bitte warten ..
Mitglied: Saschbert
05.06.2008 um 15:17 Uhr
WOW! Vielen Dank Dir! Wusste garnicht, dass man im Cursor zwei Variablen angeben kann (... INTO @ID, @Name ...), das erklärt natürlich alles. Ich konnte das jetzt in der Eile der Zeit noch nicht testen, werde das aber nachholen und berichten. Nochmals vielen Dank!
Bitte warten ..
Mitglied: filippg
05.06.2008 um 19:35 Uhr
Wenn man Cursor nicht mag sollte das auch mit einer Benutzerdefinierten Funktion gehen.

Gruß

Filipp
Bitte warten ..
Mitglied: Saschbert
05.06.2008 um 21:37 Uhr
Ja, an sowas ähnliches hatte ich auch schon gedacht, nur denke ich, die Funktion wäre recht umfangreich, weil ich ja mit verschiedenen Abfragen prüfen muss, wieviele Datensätze enthalten sind, diese quasi einzeln extrahieren, usw ... hatte auch schon überlegt, ob ich quasi einfach mit mehreren Variablen arbeite ... aber alles noch ungewiss.

Also mein Ansatz war, innerhalb der Funktion quasi in einer simpeln abfrage per TOP einer Variable den ersten Wert zuzuweisen, in einer weiteren simplen Abfrage der nächsten Variable per TOP ebenfalls einen Wert zuzuweisen, der nicht identisch mit dem ersten sein darf ... das ganze insgesammt 4x (können max 4 Werte sein!), und schon habe ich das. Und in der RETURN Variable dann durch z.B. CASE entsprechend die Kommata einfügen, sofern Vaiable 2 ebenfalls größer NULL ist ... oder so ...

Aber der CURSOR reizt mich alleine deswegen, weil ich bisher immer vermieden habe, diesen Schritt zu gehen, aber ich denke, es wohl nicht schlecht wäre, dies mal zu machen, um einfach mit Cursorn arbeiten zu können.

Aber vielen Dank für den Hinweis!
Bitte warten ..
Ähnliche Inhalte
VB for Applications
Mehrere Spalten Durchsuchen und Ergebnisse in neuer Tabelle Ausgeben
Frage von Mr.GreenVB for Applications3 Kommentare

Hallo liebe Community. Ich würde gerne mit einer VBA mehrere Spalten ("A:W") in einer Tabelle nach einem oder mehreren ...

Microsoft Office
Excel Nachfrage: Datum aus Spalte ausgeben
Frage von PronMasterMicrosoft Office2 Kommentare

Hallo Zusammen, ich habe folgende Aufgabe bekommen: Wir haben eine Excel in der in einer Spalte das Ablaufdatum von ...

Datenbanken
SQL: Inhalte aus einer Spalte mit den Inhalten aus mehreren Spalten einer zweiten Tabelle vergleichen
gelöst Frage von sqlbeginnerDatenbanken4 Kommentare

Guten Tag ich habe folgende Fragen Frage 1: Tabelle1 , Spalte A in dieser stehen Kürzel Tabelle2, Spalte A, ...

Datenbanken
SQL 2008R2: Bestimmte Spalte mehrerer Zeilen verketten
Frage von archivarioDatenbanken14 Kommentare

Hallo zusammen, nachdem ich jetzt schon Stunden verbracht habe um eine Lösung zu finden, hoffe ich auf ein erhellendes ...

Neue Wissensbeiträge
Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 1 StundeMicrosoft Office2 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 7 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office9 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Batch & Shell
Dateien verschieben mit batch
gelöst Frage von michi-ffmBatch & Shell13 Kommentare

Hallo Zusammen hat jemand evtl eine Idee? Zunächst hier das Skript: Leider werden keine UNC-Pfade unterstüzt, kann mir jemand ...