+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juillet 2012
    Messages : 23
    Points : 9
    Points
    9

    Par défaut demande optimisation si possible

    bonjour
    j'ai pu concevoir cette requête ci-dessous qui est fonctionnelle
    je voudrais avoir votre avis concernant une possible optimisation,
    la requête permet d'obtenir pour chaquelib_tabA son CA par mois sur une annee donnée
    Code :
    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
    SELECT 
    tableA.lib_tableA AS lib_tableA,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='01') THEN tableB.date.ca  ELSE  0  END) AS janvier,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='02') THEN tableB.date.ca  ELSE  0  END) AS FEVRIER,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='03') THEN tableB.date.ca  ELSE  0  END) AS MARS,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='04') THEN tableB.date.ca  ELSE  0  END) AS AVRIL,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='05') THEN tableB.date.ca  ELSE  0  END) AS  MAI,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='06') THEN tableB.date.ca  ELSE  0  END) AS JUIN,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='07') THEN tableB.date.ca  ELSE  0  END) AS JUILLET,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='08') THEN tableB.date.ca  ELSE  0  END) AS AOUT,
    SUM(CASE WHEN (SUBSTR(tableB.date,4,2)='09') THEN tableB.date.ca  ELSE  0  END) AS SEPTEMBRE,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='10') THEN tableB.date.ca  ELSE  0  END) AS OCTOBRE,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='11') THEN tableB.date.ca  ELSE  0  END) AS NOVEMBRE,
    SUM(CASE WHEN (SUBSTR(tableB.date,5,2)='12') THEN tableB.date.ca  ELSE  0  END) AS DECEMBRE,
    SUM(tableB.date.ca) AS total
    FROM 
    tableA,	
    tableB
    WHERE 
    tableB.IDtableA	=	tableA.IDtableA
    AND
    (
    LEFT(tableB.date,4) = {Param1}
    )
    GROUP BY 
    tableA.lib_tableA
    ps:avec l’éditeur d’état de windev j'ai eu quelques difficultés à obtenir les date(mois) en lettre

  2. #2
    Expert Confirmé
    Avatar de frenchsting
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 1 976
    Points : 3 317
    Points
    3 317

    Par défaut

    Si ta requête est fonctionnelle, n'y touche pas. Elle est lisible et en plus ne semble pas te poser de souci de temps de traitement.
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  3. #3
    Membre Expert Avatar de wimbish
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2006
    Messages : 411
    Points : 1 033
    Points
    1 033

    Par défaut

    Bonjour,

    Je suis d'accord avec Claude, c'est propre, je ne suis pas sur que tu puisse optimiser ce code.

    Tu peux cependant proposer ton post dans un forum dédier a SQL:
    http://www.developpez.net/forums/f37...s/langage-sql/
    Christophe.

    Tous les chemins mènent à Rome http://doc.pcsoft.fr/fr-FR/

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 972
    Points : 1 586
    Points
    1 586

    Par défaut

    Bonjour,

    Je pense que tu pourrais faire quelque chose "de mieux" avec un GROUP BY ROLLUP si tu n'étais pas sous Hyperfile !

    Pour le reste ta requête est logique... juste une jointure normalisée SQL2 serait plus sympa et peut-être qu'un sum(decode(to_char(tableB.date,'MM')='01',tableB.date.ca,0)) serait plus compact et plus clair....

    Et juste une chose... étrange ce champ "tableB.date.ca" !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •