[SQL] REQUETE sur laquelle je Seche, Please HELP

REQUETE sur laquelle je Seche, Please HELP [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 19-07-2006 à 16:50:50    

bijour msieur dame :jap:
 
Dans le cadre du boulot je seche sur une requete, je vous la présente cette coquine :
 
Table 1
---------
Date  -  Val   - Type
-----------------
06/06 -  10    -   1
06/06 -  15    -   1
06/06 -  7      -   2
06/06 -  11     -  4
07/06 -  25     -  4
 
Je voudrais donc dans ce cas précis obtenir :
 
(10 + 15) / (7 + 11)
 
En gros pouvoir faire la SOMME(VAL) pour le TYPE (1) Diviser par SOMME(VAL) pour type (2,4) et tout ca par MOIS ET ANNE
 
snif vous voyez pourquoi je seche, c'est pas rien cette requete :(  : :sweat:  
 
Merci d'avance


Message édité par massamu le 19-07-2006 à 16:51:07
Reply

Marsh Posté le 19-07-2006 à 16:50:50   

Reply

Marsh Posté le 19-07-2006 à 17:09:31    

Code :
  1. select
  2. annee,
  3. mois,
  4. sum(val * case type when 1 then 1 else 0 end) /  (case  when sum(val * case type when 1,2 then 1 else 0 end) is null then 1 when sum(val * case type when 1,2 then 1 else 0 end)=0 then 1 else sum(val * case type when 1,2 then 1 else 0 end) )
  5. from
  6. tatable
  7. group by
  8. rollup(annee,mois)


 
edit: mise en page, s'pas facile :o


Message édité par anapajari le 19-07-2006 à 17:10:20
Reply

Marsh Posté le 19-07-2006 à 17:10:08    

Code :
  1. SELECT SUM(val), type, mois, annee
  2. (
  3. SELECT val, DECODE(type, 1,1, 2) type, mois, annee
  4. from table
  5. )
  6. GROUP BY type, mois, annee;


Message édité par orafrance le 19-07-2006 à 17:10:27
Reply

Marsh Posté le 19-07-2006 à 17:19:59    

J'ai oublié de vous dire, c'est sur SQL SERVER
 
donc pour :
 
anapajari -> y'a une erreur de virgule mais je n'arrive pas a la trouver
 
orafrance -> DECODE ne fonctionne pas sous SQL SERVER 2000 :(
 
Le probleme reste entier

Reply

Marsh Posté le 19-07-2006 à 17:27:20    

c'est le case when 1,2 qu'il doit pas aimer ( en plus cela doit être 2,4) et pour finir il doit manquer un end ...
change la grosse ligne en:

Code :
  1. sum(val * case type when 1 then 1 else 0 end) /  (case  when sum(val * case type when 2 then 1 when 4 else 0 end) is null then 1 when sum(val * case type when 2 then 1 when 4 then 1 else 0 end)=0 then 1 else sum(val * when 2 then 1 when 4 then 1 else 0 end) end)

Reply

Sujets relatifs:

Leave a Replay

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