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

Développement SQL Server Discussion :

Requete SQL correction erreurs dans requete


Sujet :

Développement SQL Server

  1. #1
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut Requete SQL correction erreurs dans requete
    Salut a tous et merci pour avoir pris le temps de me lire! J'utilise SQL Server 2005 sur Vista. En fait j'ai a corriger des erreurs dans ma requete sql, c'est ca mon probleme.

    Je ne peux pas distribuer les tables ,j'ai compris ce qu'on me demande ce n'est pas ca le probleme. Le probleme est que je ne sais pas corriger mes erreurs.

    Je vous donne ici la requete complete et les messages d'erreurs:


    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
     
    SELECT *
    FROM ap_PARTENERI tab1
     
    -- Partenerii cu prima banca, primul cont,prima localitate,prima adresa(
    --localitate si adresa sunt  2 campuri in tabela parteneri adrese)
       left join
    	(SELECT tab1.IdPartener,MIN(IdContBanca) AS ContBanca,MIN(NrCont) AS NumarCont
    	 FROM ap_PARTENERI_BANCI tab2
    	 --GROUP BY tab1.IdPartener
    	 ) x on tab3.IdPartener = x.IdPartener 
     
    left join ap_PARTENERI_BANCI tab3 on tab3.IdContBanca = x.ContBanca AND 
    tab3.NrCont = x.NumarCont
     
    left join
    	(SELECT MIN(Localitate) AS Loc , MIN(Strada) AS Str
    	 FROM ap_PARTENERI_ADRESE tab4
    	) y on tab5.IdPartener = y.IdPartener
     
    left join ap_PARTENERI_ADRESE tab5 on tab5.Localitate = x.Loc AND tab5.NrCont = x.Str

    Donc ap_PARTENERI=tableau1(table1),ap_PARTENERI_BANCI=tableau2(table2) et ap_PARTENERI_ADRESE tableau3(table3).Donc je veux lier comme dans mon requete 3 tables.

    Pour mieux entendre ce que je veux faire je dois lister les partenaires avec la premiere banque et compte (donc ce sont les champs IdContBanca et NrCont du tableau ap_PARTENERI_BANCI), la premiere localite et addresse (ce sont les champs Localitate et Strada du tableau ap_PARTENERI_ADRESE).

    En esperant bien explique le probleme.

    Voila les erreurs que je ne sais pas les corriger en executant ma requete:



    Si vous voulez je peux vous donner la strucuture des champs de mes 3 tables.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    C'est pas gagné car tu nous présentes là une requête avec beaucoup d'incohérences!!

    Premièrement concernant les erreurs de type:
    'The multi-part identifier "tab1.Idpartener" could not be bound

    tu ne peux pas mettre dans ton select une colonne référant une table qui n'est pas dans ta clause from.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select T1.IdPartener,... from T2 
    cela n'existe pas, tu as certainement voulu écrire:
    select T2.IdPartener,... from T2
    deuxièmement:
    dans la clause on, comme dans une clause where, tu dois faire référence à des colonnes qui sont situées dans des tables déjà référencées (dans le code avant la clause on)

    tu ne peux pas écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select * 
    from tab1
    left join tab2
    on tab1.idpartener=tab3.idpartener --tab3 n'a pas encore été déclarée
    left join tab3 -- slt tab1 et tab2
    on tab1.idpartener=tab5.idpartener
    il faut plutôt écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select * 
    from tab1
    left join tab2
    on tab1.idpartener=tab2.idpartener
    left join tab3
    on tab1.idpartener=tab3.idpartener
    troisièmement
    Tu n'utilises pas les bonnes colonnes avec les bonnes tables.
    Dans ton code ci-dessous: la colonne Loc est une colonne que tu as créée
    et elle se trouve dans la table y et non la table x.

    LEFT JOIN
    (SELECT MIN(Localitate) AS Loc , MIN(Strada) AS Str
    FROM ap_PARTENERI_ADRESE tab4
    &nbsp y
    ...
    where x.Loc=....

    quatrièmement:
    Ok tu peux éventuellement considérer que le premier compte en banque est le min(IdContBanca) car les comptes sont éventuellement incrémentés par ordre de création et encore j'en doute.
    En revanche, considérer que la première ville, c'est le min(localitate), c'est moche comme tout, car tu auras dans ta sélection la ville qui commence par la plus petite lettre de l'alphabet.
    il n'y a pas une date d'insertion dans ta table ap_PARTENERI_ADRESE? ceci afin de retrouver la première localité renseignée pour chaque idpartener.

    cinquièmement: le plus affreux de chez affreux:

    quand tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select idpartener, min(localitate), min(strada)
    from...
    group by idpartener
    si tu as les enregistrements suivants dans ta table:
    idpartener | localitate | strada
    07652 Paris Montaigne
    07652 Strasbourg Courcelles

    tu vas avoir dans ta sélection:
    07652 Paris Courcelles

    une rue qui ne correspond pas à la ville!!


    Moi j'aurais écrit le code suivant: (cela nécessite d'avoir des dates de création ou d'insertion dans les tables ap_PARTENERI_BANCI et ap_PARTENERI_ADRESE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT P.*,PB.IdContBanca, PB.NrCont, PA.localitate, PA.strada
    FROM ap_PARTENERI P
    LEFT JOIN (select *, min(date_creation) order (partition by idpartener) as date_creation_contbanca --le premier compte bancaire attribué à l'associé
            from ap_PARTENERI_BANCI) PB
    on P.IdPartener=PB.IdPartener
    LEFT JOIN (select *, min(date_creation) order (partition by idpartener) as date_creation_localitate --la première adresse attribuée à l'associé
            from ap_PARTENERI_ADRESE) PA
    on P.IdPartener=PA.IdPartener
    where PB.date_creation=PB.date_creation_contbanca 
    and PA.date_creation=PA.date_creation_localitate
    -- dans clause where seulement les lignes correspondant à la première -- entrée de chaque table
    Mais comme je sais que tu ne vas pas utiliser cette méthode,
    voici le code qui va fonctionner tout de suite et qui répondra éventuellement à tes attentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT P.*,PB.IdContBanca, PB.NrCont, PA.localitate, PA.strada
    FROM ap_PARTENERI P
    LEFT JOIN (select IdPartener,IdContBanca, NrCont, min(IdContBanca) order (partition by idpartener) as ContBanca 
            from ap_PARTENERI_BANCI) PB
    on P.IdPartener=PB.IdPartener
    LEFT JOIN (select IdPartener, Localitate,Strada, min(Localitate) order (partition by idpartener) as Loc 
            from ap_PARTENERI_ADRESE) PA
    on P.IdPartener=PA.IdPartener
    where PB.IdContBanca=PB.ContBanca
    and PA.Localitate=PA.Loc

    Bonne lecture

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Je t'invite à lire sur l'opérateur [CROSS|OUTER] APLLY, c'est ce qu'il te faut.
    Most Valued Pas mvp

  4. #4
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Je t'invite à lire sur l'opérateur [CROSS|OUTER] APLLY, c'est ce qu'il te faut.
    Merci beacoup pour vos reponses!

    Je marque comme resolu!

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

Discussions similaires

  1. erreur dans requete sql
    Par Invité dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/03/2010, 19h54
  2. requet sql "GO", pour plusieurs requetes sql au meme temps
    Par abbd dans le forum Développement
    Réponses: 3
    Dernier message: 25/05/2008, 15h08
  3. Requete SQL sur une autre requete SQL
    Par skillipo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/12/2007, 17h58
  4. requete sql utilisant une autre requete sql
    Par arnogef dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/02/2007, 20h38
  5. erreur dans requete Sql
    Par flOZ dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/05/2006, 02h49

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