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

Langage SQL Discussion :

Comment lancer la même requête sur 4 BDD SQL SERVEUR 2000


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut Comment lancer la même requête sur 4 BDD SQL SERVEUR 2000
    Bonjour,
    grâce à à ce forum, j'avance super vite pour un rookie et c'est génial.
    Depuis avant hier, j'ai enfin réussis à "pondre" ma requête idéale.
    Elle marche nickel.

    Maintenant, je voudrais qu'elle fonctionne pour 4 bases différentes. (à la fois)

    J'ai tenté un UNION mais il ressort un syntaxe incorrecte :


    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Use BIJOU1
    SELECT   P_DOSSIER.D_RaisonSoc As Societe, F_ECRITUREC.CT_Num AS TIERS, F_COMPTET.CT_Intitule AS [Intitulé Tiers],
    SUM(case when (dbo.F_ECRITUREC.CG_Num = '41111000') Then (- (F_ECRITUREC.EC_Montant * F_ECRITUREC.EC_Sens + F_ECRITUREC.EC_Montant * F_ECRITUREC.EC_Sens - F_ECRITUREC.EC_Montant)) 
    else 0 end) AS SOLDE411,
    SUM(case when (dbo.F_ECRITUREC.CG_Num = '41300000') Then (- (F_ECRITUREC.EC_Montant * F_ECRITUREC.EC_Sens + F_ECRITUREC.EC_Montant * F_ECRITUREC.EC_Sens - F_ECRITUREC.EC_Montant)) 
    else 0 end) AS SOLDE413, 
    F_COMPTET.CT_ASSURANCE AS [Assurance Crédit],F_COMPTET.CT_ENCOURS AS [Encours Maximum],
    (F_COMPTET.CT_ASSURANCE - F_COMPTET.CT_ENCOURS) AS [Risque Réel],YEAR(F_ECRITUREC.EC_Date) AS Année
     
    FROM P_DOSSIER, F_ECRITUREC INNER JOIN
    F_COMPTET ON F_ECRITUREC.CT_Num = F_COMPTET.CT_Num
     
    WHERE YEAR(F_ECRITUREC.EC_Date) = '2008' AND dbo.F_ECRITUREC.CG_Num  IN('41111000', '41300000')
     
    GROUP BY /*MONTH(F_ECRITUREC.EC_Date),*/P_DOSSIER.D_RaisonSoc, F_ECRITUREC.CT_Num, F_COMPTET.CT_ASSURANCE,F_COMPTET.CT_ENCOURS,YEAR(F_ECRITUREC.EC_Date), 
    F_COMPTET.CT_Intitule, F_COMPTET.CT_Type
    HAVING      (F_ECRITUREC.CT_Num IS NOT NULL) AND (F_COMPTET.CT_Type = 0)
    ORDER BY F_ECRITUREC.CT_Num
     
    UNION
     
    Use BIJOU2
    SELECT   P_DOSSIER.D_RaisonSoc As Societe, F_ECRITUREC.CT_Num AS TIERS, F_COMPTET.CT_Intitule AS [Intitulé Tiers],
    SUM(case when (dbo.F_ECRITUREC.CG_Num = '41111000') Then (- (F_ECRITUREC.EC_Montant * F_ECRITUREC.EC_Sens + F_ECRITUREC.EC_Montant * F_ECRITUREC.EC_Sens - F_ECRITUREC.EC_Montant)) 
    else 0 end) AS SOLDE411,
    SUM(case when (dbo.F_ECRITUREC.CG_Num = '41300000') Then (- (F_ECRITUREC.EC_Montant * F_ECRITUREC.EC_Sens + F_ECRITUREC.EC_Montant * F_ECRITUREC.EC_Sens - F_ECRITUREC.EC_Montant)) 
    else 0 end) AS SOLDE413, 
    F_COMPTET.CT_ASSURANCE AS [Assurance Crédit],F_COMPTET.CT_ENCOURS AS [Encours Maximum],
    (F_COMPTET.CT_ASSURANCE - F_COMPTET.CT_ENCOURS) AS [Risque Réel],YEAR(F_ECRITUREC.EC_Date) AS Année
     
    FROM P_DOSSIER, F_ECRITUREC INNER JOIN
    F_COMPTET ON F_ECRITUREC.CT_Num = F_COMPTET.CT_Num
     
    WHERE YEAR(F_ECRITUREC.EC_Date) = '2008' AND dbo.F_ECRITUREC.CG_Num  IN('41111000', '41300000')
     
    GROUP BY /*MONTH(F_ECRITUREC.EC_Date),*/P_DOSSIER.D_RaisonSoc, F_ECRITUREC.CT_Num, F_COMPTET.CT_ASSURANCE,F_COMPTET.CT_ENCOURS,YEAR(F_ECRITUREC.EC_Date), 
    F_COMPTET.CT_Intitule, F_COMPTET.CT_Type
    HAVING      (F_ECRITUREC.CT_Num IS NOT NULL) AND (F_COMPTET.CT_Type = 0)
    ORDER BY F_ECRITUREC.CT_Num

    Pouvez-vous m'aider ?
    Merci
    Tibofo

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 893
    Points : 53 129
    Points
    53 129
    Billets dans le blog
    6
    Par défaut
    USE change la base par modification de l'environnement. Vous ne puvez donc pas l'utiliser DANS une requête.

    Mais pour interroger plusieurs tables venant de plusieurs bases dans une même requête, il suffit de nommer vos objet complétement, c'est à dire en précisant :
    le nom de la base POINT le nom du schéma POINT le nom de l'objet.
    Vous pouvez aussi éluder le schéma par défaut (mais pas optimisé).
    le nom de la base POINT POINT le nom de l'objet.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    FROM BIJOU1..P_DOSSIER, BIJOU1..F_ECRITUREC INNER JOIN
    BIJOU1..F_COMPTET ON F_ECRITUREC.CT_Num = F_COMPTET.CT_Num
    ...
    En revanche votre requête est bancale : elle mélange des jointures dans le WHERE et des JOIN.
    Ne faites que des JOIN !

    A +

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    merci pour votre réponse.
    Toutefois, je ne la saisis pas. J'explique:
    Entre temps (avant de lire votre réponse), j'ai tenté le truc tout bête de copier-coller de la requête en dessous de la première. J'ai changé USE BIJOU1 en USE BIJOU2
    et j'ai enlevé le UNION.

    Cela marche j'obtiens dans la même base BDD_STAT.résultat, mes données.

    Voilà pourquoi, je ne comprends pas votre réponse.

    (je précise ce n'est pas une remise en cause de votre réponse, bien au contraire... Mais juste un simple POURQUOI ? puisque cela a marché ? )
    Je suis curieux, je sais mais c'est pour avancer

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/07/2013, 22h39
  2. Comment éviter la même question sur 2 requêtes
    Par rose0729 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 02/11/2012, 14h55
  3. Réponses: 3
    Dernier message: 20/10/2010, 11h08
  4. Comment lancer une fonction présente sur une autre page ?
    Par mappy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/12/2006, 14h44
  5. comment lancer mes vieux programmes sur BDS2006
    Par emmental dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/01/2006, 13h07

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