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 :

Alleger une requete


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut Alleger une requete
    Bonjour à tous,

    voici ma requete:

    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
    40
    41
    42
    43
    SELECT         
    LTRIM(RTRIM(tgAlma.Descrip)) as Magasin,                 
    tgAgrupCliente.Descrip as CatégorieClient,                          
    MONTH (taHistorico.fechacreacion) as MOIS,      
    YEAR (taHistorico.fechacreacion) as ANNEE,          
    SUM((taHistorico.PrecioCosteMedio * (taHistorico.CdadMov * (CASE taTipoMov.Entrada WHEN 1 THEN -1 ELSE 1 END)))) as PAMPTotal,         
    SUM((taHistorico.PrecioVenta * (taHistorico.CdadMov * (CASE taTipoMov.Entrada WHEN 1 THEN -1 ELSE 1 END)))) as PrixVenteBrut,         
    SUM((taHistorico.PrecioCompra * (taHistorico.CdadMov * (CASE taTipoMov.Entrada WHEN 1 THEN -1 ELSE 1 END)))) as PrixAchatTotal,         
     
    SUM((taHistorico.ImpBrutoLinea * (CASE taTipoMov.Entrada WHEN 1 THEN -1 ELSE 1 END))) AS taHistorico_ImpBrutoLinea,         
    SUM((taHistorico.ImpDctoLinea * (CASE taTipoMov.Entrada WHEN 1 THEN -1 ELSE 1 END))) AS MontantRemise,         
    SUM((taHistorico.ImpNetoLinea * (CASE taTipoMov.Entrada WHEN 1 THEN -1 ELSE 1 END))) AS PrixVenteNet,         
    SUM(((taHistorico.ImpNetoLinea * (CASE taTipoMov.Entrada WHEN 1 THEN -1 ELSE 1 END))- (taHistorico.PrecioCosteMedio * (taHistorico.CdadMov * (CASE taTipoMov.Entrada WHEN 1 THEN -1 ELSE 1 END)))  ))AS MargePR,        
     LTRIM(RTRIM(tgEmpresa.Razon)) as Société
    FROM   taHistorico        
    LEFT OUTER JOIN taArticulo    ON taHistorico.NumIntArticulo = taArticulo.NumInterno       
    LEFT OUTER JOIN taArticulocompl    ON taarticulo.NumInterno = taArticuloCompl.NumInterno       
    LEFT OUTER JOIN tgCliente     ON taHistorico.Cliente = tgCliente.Codigo        
    LEFT OUTER JOIN tgAlma      ON taHistorico.Emp = tgAlma.Emp AND taHistorico.Almacen = tgAlma.Almacen        
    LEFT OUTER JOIN taFamProveedor   ON taHistorico.Marca = taFamProveedor.Marca AND taHistorico.FamiliaProv = taFamProveedor.Codigo        
    LEFT OUTER JOIN taFamInterna    ON taHistorico.Marca = taFamInterna.Marca AND taHistorico.FamiliaInt = taFamInterna.Codigo        
    LEFT OUTER JOIN tgTipoFacturacion  ON taHistorico.AlmTipoFacturacion = tgTipoFacturacion.TipoFacturacion        
    LEFT OUTER JOIN taMostradorOpcion  ON taHistorico.OpcionMos = taMostradorOpcion.OpcionMos        
    LEFT OUTER JOIN taDctoCompra    ON taHistorico.Marca = taDctoCompra.Marca AND taHistorico.Proveedor = taDctoCompra.Proveedor AND taHistorico.GrupoDctoCompra = taDctoCompra.GrupDctoComp AND taHistorico.TipoPedido = taDctoCompra.TipoPedido        
    LEFT OUTER JOIN tgProveedor    ON taHistorico.Proveedor = tgProveedor.Codigo       
     LEFT OUTER JOIN taEntradaOpcion   ON taHistorico.OpcionEnt = taEntradaOpcion.OpcionEnt         
    LEFT OUTER JOIN tgAgrupCliente   ON taHistorico.AlmAgrupCliente = tgAgrupCliente.Codigo       
    LEFT OUTER JOIN taCategoriaPieza  ON taHistorico.Marca = taCategoriaPieza.Marca AND taHistorico.CodigoCategoria = taCategoriaPieza.Codigo          
    LEFT OUTER JOIN taCategoriaStock  ON tahistorico.emp=taCategoriastock.emp and taHistorico.Marca = taCategoriaStock.Marca AND taHistorico.CategoriaStock = taCategoriaStock.Codigo       
    LEFT OUTER JOIN tyusuario     ON taHistorico.VendedorAlmacen = tyusuario.codigo        LEFT OUTER JOIN tgvendedor    ON tahistorico.emp=tgvendedor.emp and tahistorico.vendedor=tgvendedor.vendedor        
    LEFT OUTER JOIN taclaseproducto   ON taHistorico.Marca = taclaseproducto.Marca AND taHistorico.claseproducto = taclaseproducto.Codigo       
     LEFT OUTER JOIN taConstructor   ON taArticulo.Marca = taConstructor.marca AND  taArticulo.Constructor = taConstructor.codigo       
     LEFT OUTER JOIN taMostrador   ON taHistorico.Emp = taMostrador.Emp AND taHistorico.NumIntOrigen = taMostrador.NumIntMostrador       
     LEFT OUTER JOIN taRappel    ON taHistorico.CodigoRappel = taRappel.Codigo AND taHistorico.Marca = taRappel.Marca,        
     taTipoMov,       
     tgGrupoCont,    
     tgEmpresa,     
     tgMarca        
     WHERE     ( taHistorico.Emp = tgEmpresa.Emp ) and    ( taHistorico.Marca = tgMarca.Marca ) and      ( taHistorico.TipoMov = taTipoMov.TipoMov ) and   
     ( taHistorico.GrupoCont = tgGrupoCont.GrupoCont ) and    ( ( taHistorico.Emp in ('001','002','003','004','005','006') ) AND      ( taHistorico.fechacreacion >= '1-09-2012 0:0:0.000' ) AND 
     ( taHistorico.fechacreacion <= '30-09-2012 23:59:59.000' ) AND      ( taTipoMov.EstadVentas >= 1 ) AND    (taTipoMov.Taller = 0) AND    
     ( taHistorico.TipoMov in ('ECO','EGS','EIG','EIN','EIS','ERE','ESS','ETR','ETT','REP','SCO','SF1','SFA','SIG','SIN','SIS','SRE','SSS','STT'))) 
    GROUP BY  tgEmpresa.Razon, tgAlma.Descrip, tgAgrupCliente.Descrip, taHistorico.fechacreacion
    J'aurai voulu alléger la requête.

    SI j’enlève des jointures qui ne sont pas utilisé (la table n'ai pas référencé dans le WHERE ni dans le SELECT) est-ce que cela peux influencer le résultat de cette requete ?

    Merci d'avance pour votre aide

    guigui69

  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
    Par défaut
    Bonjour,

    Oui, ça peut influencer : lors d'une jointure, les lignes de la table de gauche sont "dupliquées" autant de fois qu'il y a des correspondances dans la table de droite. ça peut donc notamment affecter le résultat des sommes, même si les colonnes de la table de droite ne sont ni dans le select, ni dans le where...

  3. #3
    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
    Par défaut
    par contre vous pouvez déjà remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taHistorico.Emp IN ('001','002','003','004','005','006')
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taHistorico.Emp BETWEEN '001' AND '006'

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    D'accord,

    moi je parle uniquement celle qui se trouve:

    LEFT OUTER JOIN ==> tgTipoFacturacion <== ON

    Car dans la requête j'ai uniquement conservé dans le select les champs qui m'interresse


    guigui69

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    La 1ère réponse de aieeeuuuuu reste valable. Même s'il n'y a plus aucune référence à la table dans le reste de la requête, la jointure peut changer les sommes.

    Ensuite, cela dépend des contraintes sur la base : si pour une valeur de taHistorico.AlmTipoFacturacion il y a au plus une seule ligne de la table tgTipoFacturacion correspondant avec la jointure sur TipoFacturacion (par exemple, TipoFacturacion est la clé primaire de tgTipoFacturacion ), alors il n'y a aucun risque de multiplication. Et vous pouvez supprimer la jointure.

    Si par contre il peut y avoir plusieurs lignes de tgTipoFacturacion avec la même valeur de TipoFacturacion, alors vous ne pouvez pas modifier la jointure sans modifier le résultat de la requête dans le cas général.

Discussions similaires

  1. [MySQL] Aide pour alleger une requete
    Par toniox dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/07/2006, 17h12
  2. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  3. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53
  4. [VB6] [Excel] Résultat d'une requete ds une feuille
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/01/2003, 17h52
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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