[SQL] une somme un peu spéciale...

fraid26
WRInaute discret
WRInaute discret
 
Messages: 139
Inscription: 3 Oct 2008

[SQL] une somme un peu spéciale...

Message le Ven Avr 01, 2011 10:42

Bonjour à tous !

Je dois faire une somme un peu spéciale avec une de mes tables.

Pour simplifier, la table pourrait ressembler à cela :

Code: Tout sélectionner
id   nombre       id_activite        id_activite_bis
110   10                1                        #5#
111   20                2                        #1#
112   30                3                        #3#


Je dois faire la somme de (nombre) pour chaque id_activite (qu'il soit dans la colonne id_activite, ou id_activite_bis entre deux #). Actuellement je le fait grâce à une variable, avec WHERE id_activite='$id' OR id_activite_bis LIKE '#$id#', et ça fonctionne sans problème.

Cependant, je dois faire cette somme pour plusieurs id_activite, et chaque requête est un peu longue. J'aimerais donc précharger toutes les sommes dans un tableau dès le début, auquel cas je n'ai plus de variable $id. L'idée serait donc de passer par un GROUP BY.

Seulement je ne sais pas comment ajouter id_activite et id_activite_bis dans un même group by.

J'ai essayé cela :

Code: Tout sélectionner
SELECT SUM(id_compte), id_activite
  FROM matable
  where id_activite_bis like '#'+CAST(id_activite as varchar)+'#'
  group by id_activite


mais le problème est que seules les lignes avec le id_activite et id_activite_bis équivalents sur la même ligne sont retournées. (3eme ligne dans mon exemple : 3 et #3# sont sur la même ligne).

Merci de votre aide, j'espère avoir été clair !


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19599
Inscription: 8 Aoû 2004

Re: [SQL] une somme un peu spéciale...

Message le Ven Avr 01, 2011 13:02

il faudrait passer par une table intermédiaire qui fusionnerait en une seule colonne les 2 id

fraid26
WRInaute discret
WRInaute discret
 
Messages: 139
Inscription: 3 Oct 2008

Re: [SQL] une somme un peu spéciale...

Message le Ven Avr 01, 2011 13:32

Oui ça je peux éventuellement le faire dans une vue, mais ensuite ?

je ne peux pas faire un group by colonne_magique like '...' ?!

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2687
Inscription: 13 Fév 2004

Re: [SQL] une somme un peu spéciale...

Message le Ven Avr 01, 2011 14:37

Probablement quelque chose comme ça:

Code: Tout sélectionner
SELECT id_activite,sum(nombre) FROM (SELECT id,nombre,id_activite FROM table UNION SELECT id,nombre,cast(replace(id_activite_bis,'#','') as integer) s GROUP BY id_activite


Non?

Note que le UNION va par défaut éliminer les doublons, et c'est pour ça qu'on garde id dans le sub-select même si on n'en a pas vraiment besoin.

Jacques.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Wefficient et 0 invités