wählen Sie einen xml-Typ-Spalte in der select-Abfrage mit group by, SQL Server 2008
Schreibe ich eine select-Abfrage, in der ich bin, Holen mehrere Spalten (durch den Beitritt 3-4 Tische).
Ich verwende group by-Klausel gruppieren meine Ergebnisse.
Abfrage -
select ci.Candidate_Id, ci.FirstName, ci.DetailXML
from Candidate_Instance ci
where ci.Candidate_Instance_Id=2
group by
ci.Candidate_Id, ci.FirstName, ci.DetailXML
Einer der Tabellen eine Spalte mit dem XML-Datentyp. Wenn ich die Spalte in der select-Liste, ich bekomme diese Fehlermeldung -
Spalte 'Tabelle.myXML' ist ungültig in der select-Liste, weil es nicht enthalten ist, entweder in einer Aggregatfunktion oder die GROUP BY-Klausel.
und wenn ich die Spalte in die group by-Klausel, bekomme ich diese Fehler -
Der XML-Datentyp kann nicht verglichen oder sortiert, außer bei der Verwendung von IS NULL-operator.
Ich bin ziemlich verwirrt, wie Sie kommen.
Ich möchte die XML-Daten aus der Spalte.
Dank
GROUP BY
überhaupt? Sie sind nicht mit irgendwelchen Aggregaten gibt. Auch kann ein CandidateId
haben mehrere verschiedene DetailXML
Zeilen?Martin, meine ursprüngliche Abfrage ist ziemlich lang, und erklären, meine Tabellenstruktur ziemlich unbequem. Ich verstehe Ihren Standpunkt, aber ich kann nicht diskutieren, meine DB-Struktur hier. Ich will einfach nur ein Tipp/trick, um die Dinge in Bewegung.
Wenn candidate_id ist eine primäre Schlüssel innerhalb von candidate_instance das ist ganz einfach: Sie können einen Allgemeinen Tabellenausdruck und sich der cte-Tabelle die Auswahl der XML. Dies ist viel schneller als die acepted Antwort.
InformationsquelleAutor saarthak | 2011-03-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie keine Gruppe von XML-oder TEXT-Spalten, würden Sie zuerst konvertieren zu müssen, varchar(max)
In der ersten Zeile konvertiert zu varchar(max), um die GROUP BY-Klausel, und später ist es dann der re-cast wieder im XML-Format.
Werden interessant zu wissen, ob es tatsächlich Gießen Sie es
varchar(max)
und Sortieren dann diese riesigen strings oder ob es vermeidet dies.InformationsquelleAutor RichardTheKiwi
Ich bin mir nicht wirklich sicher, warum Sie mit
group by
hier auf der Grundlage der Informationen in Ihrer Frage, aber wie auch immer, das sollte so funktionieren, wie es scheint, Sie sind nur, wie es in dergroup by
um der Lage sein, umselect
.Nicht, bis ich verstehe den Zweck der
GROUP BY
. Wenn Sie es verwenden, um Duplikate entfernen brachte eineJOIN
würde ich wahrscheinlich schreiben Sie die Anfrage in ganz anderen Weg. (z.B. mitWHERE EXISTS
eher als eineJOIN
)InformationsquelleAutor Martin Smith
Wenn Sie irgendeine Spalte(s) mit individuellen Daten in Ihrer Tabelle, die Sie verwenden können, ein allgemeiner Tabellenausdruck, was wäre eine schnelle Lösung, wenn es einen index auf die Spalte(N):
InformationsquelleAutor Christian4145