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, 15950 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 ...

PHP

MySQL spalten in tabellenform ausgeben

Frage von SanastasiaPHP4 Kommentare

Hallo, möchte 2 Spalten einer Datenbank in Tabellenform ausgeben, später sollen es mal 4 sein. Das ist das was ...

PHP

Spalten Splitten und als normale Zeile ausgeben

gelöst Frage von tsunamiPHP8 Kommentare

Hallo, ich brauche einen Ansatz. geht um php/mysql. Also ich habe eine Tabelle: id, Datum, Nummer,Anbieter Nun habe ich ...

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 ...

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 18 StundenAusbildung8 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 2 TagenSpeicherkarten2 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 2 TagenSicherheit

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 3 TagenHardware3 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Off Topic
SysAdmin im öffentlichen Dienst - jemand Erfahrungen?
Frage von JohnDorianOff Topic22 Kommentare

Hallo zusammen, hat jemand Erfahrung wie es so ist als SysAdmin im öffentlichen Dienst (Landkreis) im Südwesten der Republik ...

SAN, NAS, DAS
Nas mit USB und LAN gleichzeitig zugreifen
gelöst Frage von MarkBeakerSAN, NAS, DAS16 Kommentare

Hallo zusammen, ich suche eine Art NAS, womit ich via LAN und USB zugreifen kann. Folgender Aufbau ist gedacht: ...

Vmware
Offene LDAP-Server in AS
gelöst Frage von obi-wan-kenobiVmware16 Kommentare

Hallo alle Miteinander, ich habe ein Problem, unsere VM-Ware Appliance (Version. 6.5.0.10000) ist scheinbar angreifbar. Wir haben eben die ...

Entwicklung
Ist dies als Programmieren zu bezeichen?
Frage von kmsw110Entwicklung13 Kommentare

Hallo, ein Kollege redet dauernd darüber das er im Betrieb seine Maschinen (Fräsmaschinen) Programmiert bzw. Zahlenwerte in ein .txt ...