sélectionnez une colonne de type xml dans la requête select avec le groupe par SQL Server 2008
Je suis en train d'écrire une requête select dans lequel je suis aller chercher sur plusieurs colonnes (en se joignant à 3-4 tables).
J'ai utiliser la clause group by pour le groupe de mes résultats.
Requête
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
L'une des tables ont une colonne de type de données XML. Quand j'ajoute de la colonne dans la liste de sélection, j'ai cette erreur -
Colonne de la table.myXML' est pas valide dans la liste de sélection, car il n'est pas contenue dans une fonction d'agrégation ou de la clause GROUP BY.
et quand j'ajoute de la colonne dans la clause group by, j'ai cette erreur -
Le type de données XML ne peut pas être comparé ni triés, sauf lors de l'utilisation de la EST NULL opérateur.
Je suis assez confus quant à la façon de sortir de cette.
Je veux obtenir les données XML à partir de la colonne.
Grâce
- Pouvez-vous nous donner le réel de la requête et des structures de table afin que nous puissions voir pourquoi vous utilisez
GROUP BY
à tous? Vous n'utilisez pas la présence d'agrégats de là. Peut aussi unCandidateId
plusieursDetailXML
lignes? - Martin, ma requête est assez long et en expliquant mon tableau de structure serait assez gênant. Je comprends votre point, mais je ne peux pas discuter de ma DB structure de plus d'ici. Je veux juste un conseil/astuce pour faire bouger les choses.
- Si candidate_id est une clé primaire dans candidate_instance c'est simple: Vous pouvez utiliser une expression de table commune et rejoindre le cte pour que le tableau en sélectionnant le fichier XML. Ce sera beaucoup plus rapide que la lu de réponse.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas groupe par XML ou des colonnes de TEXTE, vous devez d'abord les convertir à varchar(max)
Sur la première ligne, il est converti en varchar(max) pour correspondre à la clause GROUP BY, et plus tard, il est re-fonte de retour à XML.
varchar(max)
et puis le tri de ces énormes chaînes ou si elle permet d'éviter cela.Je ne suis pas vraiment sûr de savoir pourquoi vous utilisez
group by
ici sur la base des informations dans votre question, mais de toute façon cela devrait fonctionner comme il semble que vous êtes seulement, y compris dans legroup by
afin d'être en mesure deselect
il.GROUP BY
. Si vous l'utilisez pour supprimer les doublons introduite par unJOIN
je serais probablement écrire la requête dans une autre voie. (par exemple, à l'aide deWHERE EXISTS
plutôt qu'unJOIN
)Si vous avez n'importe quelle colonne(s) des données uniques dans votre tableau, vous pouvez utiliser une expression de table commune, ce qui serait une solution rapide si il existe un index sur cette colonne(s):