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

WRInaute discret
Bonjour à tous !

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

Pour simplifier, la table pourrait ressembler à cela :

Code:
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:
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 !
 
WRInaute discret
Oui ça je peux éventuellement le faire dans une vue, mais ensuite ?

je ne peux pas faire un group by colonne_magique like '...' ?!
 
WRInaute accro
Probablement quelque chose comme ça:

Code:
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.
 
Discussions similaires
Haut