IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

requete sql de rapprochement


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut requete sql de rapprochement
    Bonjour,
    Je suis novice en sql, qq'un peut m'aider.
    voici mon problème, j'ai 2 tables:
    T_RDU
    Pole Region CodeGest NumPortefeuille CodeAgence Nb_ab
    AA NE 11111111 1 3856404 4
    AA NE 11111111 2 3849204 19
    AA NE 22222222 5 3627087 5
    AA NE 22222222 6 3627087 2
    AA O 33333333 8 223344 1
    AA O 33333333 9 223344 NULL

    RDU_HISTO
    CodeGest Pole Region NumPortefeuille CodeAgence DateDebut DateFin
    11111111 AA NE 1 3549087 01/09/2012 NULL
    11111111 AA IDF 2 3549000 01/09/2012 NULL
    11111111 AA NE 3 3856404 01/09/2012 NULL
    22222222 AA NE 5 3627087 01/09/2011 NULL
    22222222 AA NE 6 3627087 01/08/2011 NULL
    33333333 AA O 9 223344 01/02/2013 NULL

    Les règles sont:
    Dans le cas où un code gestionnaire a plusieurs codes portefeuilles dont un principal on applique la règle suivante :
    Règle 1*: On rattache la pyramide commerciale au code portefeuille principal avec la somme des indicateurs pour tous les portefeuilles associés à ce gestionnaire.

    Dans le cas où un code gestionnaire a plusieurs codes portefeuilles principaux on applique la règle suivante :
    Règle 1*: On rattache la pyramide commerciale au code portefeuille en cours le plus ancien (date d'ouverture du code portefeuille la plus ancienne et date de fermeture nulle).

    Règle 2*: Si plusieurs codes portefeuilles principaux sont en cours (date de fermeture nulle) et que les dates *d'ouverture de ces code portefeuilles sont égales (même date d'ouverture) alors on rattache un des codes *portefeuilles et la pyramide commerciale associée sélectionnée de*manière aléatoire au code gestionnaire.

    On doit avoir comme résultat:
    Pole Region CodeGest NumPortefeuille CodeAgence Nb_ab
    AA IDF 11111111 2 3549000 23
    AA NE 22222222 6 3627087 7
    AA O 33333333 9 223344 1

    Si qq'un a une idée pour construire la requete, merci.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Malgré le soin que vous avez apporté à votre demande, certaines choses ne sont pas claires quand on ne connais pas votre contexte ni votre BDD :

    - comment sait-on si un code portefeuille est principal ?
    - qu'est que les "indicateurs" ? la colonne Nb_ab ?
    - qu'entendez vous par
    On rattache la pyramide commerciale au code portefeuille
    Si vous avez écrit des requêtes, n'hésitez pas à les poster, ça pourra nous aider à mieux comprendre votre besoin

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Excusez-moi je vais être un peu plus clair:
    J'ai une table T_RDU
    CodeGest Region IdPortefeuille CodeAgence DtOuverture DtFermeture
    1 NE 1245 3549087 2010-12-31 NULL
    1 IDF 1288 3549000 2010-12-31 NULL
    1 NE 1235 3856404 2010-12-31 2011-12-31
    2 NE 1533 3627087 2009-12-31 NULL
    2 NE 1566 3627087 2008-12-31 NULL
    3 O 1933 2233445 2009-12-31 NULL

    Je veux récupérer 1 ligne par CodeGest en ne prenant la DtOuverture la plus ancienne et la DtFermeture is null. Le problème se pose quand on a pour un meme CodeGest les memes DtOuverture (alors dans ce cas là, je dois prendre aléatoirement 1 ligne).

    Le résultat que je dois avoir dans la table T_RDU_UNIQUE:
    CodeGest Region IdPortefeuille CodeAgence DtOuverture DtFermeture
    1 IDF 1288 3549000 2010-12-31 NULL
    2 NE 1566 3627087 2008-12-31 NULL
    3 O 1933 2233445 2009-12-31 NULL

    J'ai commencé à faire la requete mais je suis bloqué par la règle des meme DtOuverture pour un meme CodeGest.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select distinct (A2.CodeGest)
    				,A1.Region
    				,A1.IdPortefeuille
    				,A1.CodeAgence 
    				,A1.DtOuverture
    				,A1.DtFermeture
    FROM T_RDU A1
    INNER JOIN (select  CodeGest
    				   ,min(DtOuverture) DtOuverture
    			from T_RDU
    			where DtFermeture is null
    			group by CodeGest) A2
    ON  A2.CodeGest=A1.CodeGest
    AND A2.DtOuverture=A1.DtOuverture
    Merci pour votre aide.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    C'est plus clair ainsi : vous pouvez utiliser les fonctions fenetrées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    ;WITH T_RDU_RN AS (
    	SELECT	CodeGest
    		,	Region
    		,	IdPortefeuille
    		,	CodeAgence 
    		,	DtOuverture 
    		,	DtFermeture
    		,	ROW_NUMBER() OVER(
    				PARTITION BY	CodeGest
    				ORDER BY		DtOuverture
    			) AS Rn
    	FROM	T_RDU
    	WHERE	DtFermeture IS NULL
    )
    SELECT	CodeGest
    		,	Region
    		,	IdPortefeuille
    		,	CodeAgence 
    		,	DtOuverture 
    		,	DtFermeture
    FROM	T_RDU_RN
    WHERE	Rn = 1
    Attention avec cette solution, si pour une CodeGest vous n'avez aucune date de fermeture a NULL, vous n'aurez aucune ligne pour ce codeGest. Apparemment, c'est ce que vous voulez...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  2. Prob de requete sql et variable
    Par agent-zaizai dans le forum ASP
    Réponses: 11
    Dernier message: 21/10/2003, 16h54
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 16h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo