2017-03-05 2 views
0

Ceci est la requête de sélection:Eliminez les résultats en double dans une requête de sélection qui contient la colonne CLOB

select orderid,ordernum,orderdate,orderxml from orders 

La requête renvoie plusieurs lignes avec la même NumCommande. J'ai essayé d'utiliser DISTINCT et Group BY mais orderxml est une colonne clob. Comment puis-je éliminer les doubles ordonnées dans ma requête?

+0

Pourquoi avez-vous 'double ordernum' dans votre table? Ont-ils les mêmes valeurs pour 'orderdate' et' orderxml'? Si non, quelles valeurs devez-vous sélectionner pour ces colonnes? – mathguy

+0

Oui, ils ont les mêmes valeurs pour orderdate et orderxml. – user576914

Répondre

0

Vous pouvez utiliser une fonction analytique pour identifier un seul orderid pour chaque ordernum - probablement min ou max, mais d'autres fonctions sont disponibles, cela dépend de ce dont vous avez besoin - dans une sous-requête, puis filtrez uniquement pour obtenir les lignes avec les ID identifiés:

select orderid, ordernum, orderdate, orderxml 
from (
    select orderid, ordernum, orderdate, orderxml, 
    max(orderid) over (partition by ordernum) as maxorderid 
    from orders 
) 
where orderid = maxorderid; 

la vue en ligne obtient toutes les colonnes et les lignes de votre table, mais ajoute une colonne supplémentaire à son résultat qui a l'ID maximale sur toutes les lignes avec le même numéro de commande. (Vous pouvez ajouter tous les autres filtres que vous voulez, ou bien sûr).

Le filtre externe ne correspond alors qu'à l'ID pour chaque numéro de commande correspondant à cette valeur maximale.

Ceci suppose que orderid est unique - au moins pour un ordernum mais vraisemblablement globalement. Vous avez dit que le orderdate est toujours le même pour le ordernum mais vous pouvez l'inclure dans la partition si ce n'est pas le cas, en modifiant éventuellement la fonction analytique utilisée.

(Et puis enquêtez comment et pourquoi vous obtenez des doublons, et essayer de les arrêter, puis supprimer les doublons de votre table - avec soin ...)