pourcentage ou volume cumulé

pourcentage ou volume cumulé - SQL/NoSQL - Programmation

Marsh Posté le 27-09-2013 à 17:57:57    

Bonjour,
COmment écrire une requête SQL pour Oracle qui me permet de connaitre un % et un volume cumulé à partir d'une table ?
 
Voici mes données

Code :
  1. CLIENT  COMMANDE   NB
  2. Client1  cmd1      10
  3. Client1  cmd2       5
  4. Client2  cmd1       3
  5. Client2  cmd2       2
  6. Client2  cmd3       5


 
J'aimerais avoir un résultat de ce style là avec un tri décroissant par CLIENT sur le NB

Code :
  1. CLIENT  CmdTotal    COMMANDE   NB   CmdCumul   PctNB   PctCumul
  2. Client1     15        cmd1     10       10      0.67     0.67
  3. Client1     15        cmd2      5       15      0.33     1
  4. Client2     10        cmd3      5        5      0.50     0.50
  5. Client2     10        cmd1      3        8      0.30     0.80
  6. Client2     10        cmd2      2       10      0.20     1


 
Mon autre question est : comment insérer les résultats dans une table Oracle de stockage des données calculées.
Sachant que je ne veux conserver que les résultats qui ont une volumétrie suffisante pour être intéressant.
Ainsi, je veux garder, pour chaque CLIENT les lignes pour lesquelles NB > 2 et tant que PctCumul est <= 0.80
 
Auriez-vous une idée de comment faire ?
 
Merci à tous,
MarieO

Reply

Marsh Posté le 27-09-2013 à 17:57:57   

Reply

Marsh Posté le 30-09-2013 à 12:21:01    

Pour ta colonne PctNB tu peux par exemple utiliser une CTE (common table expression) :
 

Code :
  1. WITH totals As
  2. (SELECT SUM(NB) As cumul, client FROM ClientCommande GROUP BY client)
  3. SELECT c.id, c.client, c.commande, c.nb,
  4. CAST(NB As float) / CAST(cumul As float) As PctNB
  5. FROM ClientCommande c INNER JOIN totals ON c.client = totals.client


 
Pour tes colonnes de cumuls c'est un peu plus compliqué, il faut regarder du côté des cumulatives sums sous Oracle. Regarde par exemple là-dessus : http://nimishgarg.blogspot.hk/2010 [...] using.html, ça t'inspirera peut-être.

Reply

Marsh Posté le 01-10-2013 à 17:29:45    

Bonjour,
J'ai utilisé les fonctions analytiques pour y arriver et cela fonctionne correctement.
Merci de votre aide.
 
Eiramo

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed