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 totalisant 4 tables identiques


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut requete totalisant 4 tables identiques
    Bonjour,
    Mon probleme est que je dois totaliser 4 tables qui ont les memes colonnes :
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select
    Cpte General,
    Designation,
    sum(montant)
    from societe_a,societe_b,societe_c,societe_d
    where date between '01/01/09' and '31/10/09'
    group by Cpte General
    Comment puis je totaliser tous mes comptes generaux le plus efficacement possible ?
    Je ne peux pas faire et car je dois aussi recuperer les montants des autres societes. et si je fais ça il me manque des totaux des autres societes.

    Avez vous une solution optimisant la requete

    Merci pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous pouvez par exemple écrire :

    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
    SELECT CpteGeneral, Designation, SUM(montant)
    FROM
    (
    		SELECT CpteGeneral,
    				Designation,
    				sum(montant) AS montant
    		FROM societe_a
    		WHERE date BETWEEN '01/01/09' AND '31/10/09'
    		GROUP BY Cpte General, Designation
    	UNION
    		SELECT CpteGeneral,
    				Designation,
    				sum(montant) AS montant
    		FROM societe_b
    		WHERE date BETWEEN '01/01/09' AND '31/10/09'
    		GROUP BY Cpte General, Designation
    	UNION
    		SELECT CpteGeneral,
    				Designation,
    				sum(montant) AS montant
    		FROM societe_c
    		WHERE date BETWEEN '01/01/09' AND '31/10/09'
    		GROUP BY Cpte General, Designation
    	UNION
    		SELECT CpteGeneral,
    				Designation,
    				sum(montant) AS montant
    		FROM societe_d
    		WHERE date BETWEEN '01/01/09' AND '31/10/09'
    		GROUP BY Cpte General, Designation
    ) AS TMP
    Pourquoi avoir tout mis dans 4 tables ?
    Pensez à placer toutes vos données dans une seule table en ajoutant une colonne dont les valeurs référenceront une table des sociétés

    Avec votre structure de données, le jour où une nouvelle société arrive, vous êtes obligé de modifier tout votre code. Si vous mettez tout dans une seule table, il vous suffira d'ajouter une ligne dans la table des sociétés, et le tour est joué

    @++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    Merci elsuket,
    c'est effectivement l'idée de requete que je privilegiais , mais j'avais un doute sur l'optimisation.
    Pour l'histoire des 4 tables c'est effectivement une erreur que l'on est en train de corriger, car effectivement cela necessite beaucoup trop d'efforts pour des requetes simples.

    Merci encore

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 56
    Par défaut
    En attendant tu devrais peut etre créer une vue de tes 4 tables comme ça tu peux l'appeler à chaque fois et si tu crée une autre société tu ne modifie que la vue.


    J'ai eu le souci identique sur des logiciels de compta sur AS400.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    UNION ALL est impératif ici, sinon vous risquez d'avoir des surprises !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    Merci pour vos reponse,
    Je vais essayer les differentes solutions et voir celle qui me conviendra le mieux.
    Je vais essayer aussi avec une table virtuelle.

    Merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    Bonjour,
    Apres plusieurs test , ta solution elsuket semble la plus efficace, et la plus fiable , avec bien sur la modification de Waldar

    Merci pour votre aide

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Effectivement j'ai omis le ALL que Waldar a bien fait de relever

    Notons au passage que les opérateurs EXCEPT et INTERSERT font le distinct automatiquement aussi

    @++

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

Discussions similaires

  1. Requete sur deux table identiques donne des doublons
    Par mimilamite dans le forum Langage SQL
    Réponses: 12
    Dernier message: 20/11/2008, 14h32
  2. requete sur 3 tables identiques
    Par db48752b dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/03/2008, 21h31
  3. Requete entre 2 tables.
    Par stebar dans le forum Débuter
    Réponses: 11
    Dernier message: 09/06/2004, 16h21
  4. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50
  5. [MS-SQL]requete sur 3 tables
    Par pascalT dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/04/2003, 11h24

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