SQL: Résultats regroupés en évitant les doublons

Fermé
coeurdange57 Messages postés 5 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 13 janvier 2017 - Modifié par coeurdange57 le 13/01/2017 à 08:51
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 13 janv. 2017 à 12:53
Bonjour,

Pourriez-vous m'aider concernant l'élaboration d'une requête SQL sur une base de données ?

Le contexte est le suivant: mon système gère des contrats liés à des activités (1 contrat peut être lié à 1 ou plusieurs activités). Chaque activité est lié à un "domaine"

Voici la structure des tables de ma base de données:





J'ai créé cette vue: VUE_CONTRAT_ACTIVITE_DOMAINE en effectuant la requête:

SELECT c.Id_CONTRAT,
a.Id_ACTIVITE,
a.Id_DOMAINE
FROM LIEN_CONTRAT_ACTIVITE c, activite a
WHERE c.Id_CONTRAT = a.Id_CONTRAT




J'ai effectué cette requête afin d'obtenir tous les domaines obtenus par contrat:

SELECT Id_CONTRAT,
    SUBSTR(SYS_CONNECT_BY_PATH(Id_DOMAINE,';'),2) Id_DOMAINE
  FROM
    (SELECT Id_DOMAINE,
      Id_CONTRAT,
      COUNT(*) OVER ( partition BY Id_CONTRAT ) im,
      ROW_NUMBER () OVER ( partition BY Id_CONTRAT order by Id_DOMAINE) seq
    FROM VUE_CONTRAT_ACTIVITE_DOMAINE
    WHERE Id_CONTRAT IS NOT NULL
    )
  WHERE seq               =im
    START WITH seq        =1
    CONNECT BY prior seq+1=seq
  AND prior Id_CONTRAT         =Id_CONTRAT




Cependant je souhaiterais pour la dernière ligne que le système affiche 2;8 et non pas 2;8;8 c'est-à-dire qu'il n'affiche qu'une fois le domaine même si celui-ci est le même pour plusieurs activités.

Pourriez-vous me dire comment faire?

Merci d'avance pour votre aide.

Cordialement
A voir également:

1 réponse

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 janv. 2017 à 12:53
bonjour, ne pourrais-tu pas simplement utiliser une vue VUE_CONTRAT_DOMAINE au lieu de la vue VUE_CONTRAT_ACTIVITE_DOMAINE comme base de ta requête?
suggestion pour VUE_CONTRAT_DOMAINE:
SELECT distinct c.Id_CONTRAT,
a.Id_DOMAINE
FROM LIEN_CONTRAT_ACTIVITE c, activite a
WHERE c.Id_CONTRAT = a.Id_CONTRAT
0