2010-12-09 17 views
0

Es tut mir leid, ich weiß nicht, wie das heißt, also habe ich auch keine Ahnung, wie man es googelt. Ich werde versuchen zu erklären, was ich brauche. Es gibt ein Standardszenario, in dem ich eine Art Objekt speichernde Tabelle habe und es gibt eine andere Tabelle, die Objektattribute enthält. Ein Objekt kann vielen Attributen zugeordnet sein. Wenn Sie also alle Daten zu einem Objekt benötigen, werden Sie der Attributtabelle beitreten und viele Zeilen erhalten. In einer scenarion, bin ich die Abfrage vieler Objekte zur gleichen Zeit und ein subselect tut ein Attribut wählen:sql mehrere Zeilen in einer Spalte auswählen

SELECT basic data, 
(SELECT some attribute from attributes table) AS attribute1 
FROM objects table 
JOIN something 
JOIN something 
... 

Alles ist in Ordnung, aber ich brauche noch ein paar Attribute aus dieser Liste auswählen. Was wäre ein optimaler Weg dazu? Ich denke, 2 weitere Unterabfragen zu schreiben ist keine sehr gute Idee. Ich habe von einigen Pivot-Funktionen in t-sql gehört, aber ich bin mir nicht sicher, ob das das ist, was ich brauche. Idealerweise werden Attribute als neue Spalten in einer einzelnen Zeile mit allen anderen Daten zurückgegeben, wobei Attributname der neue Spaltenname und Attributtext der neue Spaltenwert ist. Aber Attributnamen können Leerzeichen usw. enthalten, so dass ich nicht sicher bin, ob sie als Spaltennamen verwendet werden können oder ob es überhaupt möglich ist, eine solche Auswahl durchzuführen.

SQL ist von Microsoft, aber es wäre schön, eine Lösung zu haben, die auch auf anderen Datenbank-Engines unterstützt wird.

Alle Zeiger oder Google Schlüsselwörter geschätzt;]

+0

Bitte schreiben Sie eine Beispiel-Eingang und die gewünschte Ausgabe. –

+0

Was Sie beschreiben, erfordert dynamisches SQL, da Sie nicht wissen, wie viele Spalten die Ausgabe haben wird (hängt von den Daten in den Tabellen ab). Also, ein Google für "Dynamic SQL". Und, ja, ein Drehpunkt würde auch die Arbeit machen. –

+0

Wenn Sie nach dem Titel suchen, suchen Sie nach einem Duplikat von [Frage 4386346] [1], das sich als Duplikat von [Frage 194852] [2] und [Frage 6899] [3] herausstellte. Aber vielleicht ist das nur ein Teil Ihres Problems. [1]: http://stackoverflow.com/questions/4386346/sql-column-from-all-rows-returned-from-a-join-into-a-single-column [2]: http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string [3]: http://stackoverflow.com/questions/6899/is-there-a-way-to -create-a-mssql-function-to-Join-mehrere Zeilen aus einer Unterabfrage – TomaszK

Antwort

0

Pivot ist nicht das, was Sie brauchen.

Haben Sie keine Angst vor mehreren Reihen, es ist oft ziemlich schnell. Verwenden Sie einfach ein O/RM (NHibernate oder EF). Sie können Ihre Abfragen immer mit NHProf optimieren, wenn Sie Leistungsprobleme haben.

Ohne O/RM gibt es weitere zwei Möglichkeiten:

  • Ausgabe eine XML-Unterabfrage und Abrufen alle Attribute in auf Spalte als XML-Liste.

  • Geben Sie zwei Abfragen aus und sortieren Sie sie auf dem Client aus. In ADO.NET DataSets ist diese Funktion integriert. Sie können dies auch mit dem IDataReader selbst tun.

0

Der Code für eine dynamische Dreh machen, ist in meiner Antwort here

Verwandte Themen