2010-12-10 15 views
1

Ich versuche, Relative Informationen aus einer Tabelle zu finden und diese Ergebnisse (zusammen mit anderen nicht verwandten Ergebnissen) in einer Zeile als Teil einer größeren Abfrage zurückzugeben.Zurückgeben mehrerer Werte in einer Spalte innerhalb einer Hauptabfrage

Ich habe bereits versucht, dieses Beispiel, für meine Daten modifiziert.
How to return multiple values in one column (T-SQL)?
Aber ich kann es nicht zur Arbeit bringen. Es wird keine Daten ziehen (Ich bin sicher, es ist Benutzer [ich] Fehler).

Wenn ich die Tabelle direkt mit einer TempTable abfrage, kann ich die Ergebnisse korrekt erhalten.

DECLARE @res NVARCHAR(100) 
SET @res = '' 
CREATE TABLE #tempResult (item nvarchar(100)) 
INSERT INTO #tempResult 
SELECT Relation AS item 
FROM tblNextOfKin 
WHERE ID ='xxx' AND Address ='yyy' 
ORDER BY Relation 
SELECT @res = @res + item + ', ' from #tempResult 
SELECT substring(@res,1,len(@res)-1) as Result 
DROP TABLE #tempResult 

Beachten Sie die WHERE Linie oben, xxx und yyy würde auf den Eingangskriterien für die Funktion variieren. Aber da Sie TempTables nicht in einer Funktion verwenden können, stecke ich fest.

Die relevanten Felder in der Tabelle, die ich abfragen möchte, sind wie folgt.
tblNextOfKin
ID - varchar (12)
Name - varchar (60)
Relation - varchar (30)
Adresse - varchar (100)

Ich hoffe, dass dies genug Sinn macht ... ich sah, auf einem anderen Beitrag ein Ausdruck, der passt.
Mein SQL-Fu ist nicht so gut.

Sobald ich eine funktionierende Funktion bekomme, werde ich es in die Hauptabfrage für das SSIS-Paket, an dem ich arbeite, die Daten aus vielen anderen Tabellen zieht.

Ich kann mehr Details zur Verfügung stellen, wenn nötig, aber die Seite sagte, um es einfach zu halten, und ich habe versucht, dies zu tun.

Danke !!!

Follow-up (weil, wenn ich einen Kommentar zu der Antwort unten hinzugefügt habe, konnte ich die Formatierung nicht bearbeiten)
Ich muss in der Lage sein, Ergebnisse aus verschiedenen Spalten zu erhalten.
ID Name Relation Adresse
1, Mike, SON, 100 Haupt St.
1, Sara, DAU, 100 Haupt St.
2, Tim, SON, 123 South St.
Sowohl die ersten beiden Menschen leben an derselben Adresse, also wenn ich nach ID = '1' und Adresse = '100 Main St.' frage Ich brauche die Ergebnisse, um so etwas wie ...
"DAU, SON"

Antwort

0

Mysql hat GROUP_CONCAT

SELECT GROUP_CONCAT(Relation ORDER BY Relation SEPARATOR ', ') AS item 
FROM tblNextOfKin 
WHERE ID ='xxx' AND Address ='yyy' 

Sie es mit

für die gesamte Tabelle tun
SELECT ID, Address, GROUP_CONCAT(Relation ORDER BY Relation SEPARATOR ', ') AS item 
FROM tblNextOfKin 
GROUP BY ID, Address 

(unter der Annahme, ID ist nicht eindeutig)

note: Dies ist in der Regel eine schlechte Übung als Zwischenschritt, dies ist nur als endgültige Formatierung für die Präsentation akzeptabel (andernfalls werden Sie ungroupi enden ng es das sein wird Schmerz)

+0

aussieht wie das funktionieren würde, aber für besser oder schlechter sind wir mit Microsoft SQL. Danke für die Antwort. – Scottster

+0

ah, sorry .. ich lese mein SQL fu und las es als mysql fu: D – Unreason

0

Ich glaube, Sie so etwas wie dieser (SQL Server benötigen):

SELECT stuff((select ',' +Relation 
    FROM tblNextOfKin a 
    WHERE ID ='xxx' AND Address ='yyy' 
    ORDER BY Relation 
    FOR XML path('')),1,1,'') AS res; 
+0

Ich glaube nicht, dass das für meine Bedürfnisse funktionieren wird. – Scottster

+0

Ich denke nicht, dass das für meine Bedürfnisse funktionieren wird. Wenn ich die Syntax für STUFF nachschaue, wird "STUFF (Zeichenausdruck, Start, Länge, Zeichenausdruck)" angezeigt. Dabei ist Zeichenausdruck eine Zeichenfolge und der zweite Zeichenausdruck wird in die erste Zeichenfolge an der Position "Start" eingefügt. Ich muss in der Lage sein, Ergebnisse aus verschiedenen Spalten zu erhalten. ID Name Beziehung Adresse 1, MIKE, SON, 100 Main St. 1, Sara, DAU, 100 Main St. 2, TIM, SON, 123 South St. Beide die ersten beiden Menschen leben an der gleichen Adresse, so Ich brauche die Ergebnisse toolook so etwas wie ... "1 DAU, SON" – Scottster

Verwandte Themen