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

Mitglied: Saschbert

Saschbert (Level 1) - Jetzt verbinden

05.06.2008, aktualisiert 21:37 Uhr, 16082 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
Exchange Server

Exchange Nachrichtenverfolgung bringt kein Ergebniss

Frage von Tim--xExchange Server1 Kommentar

Hallo liebe Admins, auf einem Exchange 2010 hat ein User eine Datei bekommen die so bezeichnet ist "Emailing: Image ...

Datenbanken

SQL Abfrage: Ergebniss aus einer Tabelle mit Bedigung aus einer 2. Tabelle

gelöst Frage von holiboliDatenbanken4 Kommentare

Ausgangslage: Tabellen Auf.Texte Auf_Dokumente Inhalt (den ich brauche): Auf_Texte: AUF_Texte.Z_Dokumenttyp AUF_Texte.SprachePRO AUF_Texte.Z_Unser_Zeichen AUF_Texte.TextfeldRTF (Nur dieses sollte am schluss angezeigt ...

Windows Server

Kein Zugriff mehr auf SQL nach Hochstufung zum DC

gelöst Frage von KrisKWindows Server21 Kommentare

Guten Morgen, ich habe einen Server2012 zum Domänencontroller hochgestuft und seitdem keinen Zugriff mehr auf meine 2 SQL Instanzen. ...

Netzwerkgrundlagen

CAT6 Leitung gemessen und folgendes Ergebniss. Brauche euere Beurteilung was das nun bedeutet !!! DANKE

gelöst Frage von gplusmpeetNetzwerkgrundlagen6 Kommentare

Hallo Leute, Wie ihr unten sehen könnt wurden Netzwerkkabel gemessen. Folgendes Ergebnis ist dabei herausgekommen. könnt ihr mir nun ...

Neue Wissensbeiträge
Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 2 TagenOff Topic

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 2 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Sicherheit

MikroTik: Sicherheitslücke wird ausgenutzt obwohl ein Update seit langem verfügbar ist

Information von sabines vor 2 TagenSicherheit

Obwohl ein Update, dass die nun massenhaft ausgenutzte Lücke schließt, seit langem (März 2018) verfügbar ist, wird es offensichtlich ...

Informationsdienste
Gut getarnter Trojaner unterwegs (Emotet)
Information von nepixl vor 4 TagenInformationsdienste3 Kommentare

Hallo, quick & dirty: ein neuer Cryptotrojaner sorgt wieder für Millionenschäden. BSI Artikel Heise Artikel Der Trojaner kommt in ...

Heiß diskutierte Inhalte
Rechtliche Fragen
Systemhaus auf Abwegen
Frage von rocco61Rechtliche Fragen12 Kommentare

Hallo zusammen, bin derzeit ratlos bei dem folgenden Scenario: In einen Seniorenheim wurde beschlossen, die IT an eine andere ...

Router & Routing
MikroTik - Routing, Bridging, Switching
gelöst Frage von Alex29Router & Routing9 Kommentare

Hallo in die Runde, als Hobby-Admin würde ich bitte mal wieder Eure Hilfe benötigen. Seit der Umstellung auf RouterOS ...

Windows Server
HP Proliant DL 380G7 ILO2 Problem und DL 580G6 OS Prolem
gelöst Frage von Home-NeulingWindows Server6 Kommentare

Hallo, ich bin neu hier, und hoffe das ich hier jetzt auch richtig Poste. Ich habe mir zuhause ein ...

Exchange Server
Exchange Server 2010: Keine Eingehenden E-MAils
Frage von gabeBUExchange Server6 Kommentare

Hallo Zusammen Ich habe das kurzen auf dem Exchange 2010 Server das Problem, dass ich keine externen E-Mails mehr ...