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

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par fraid26, 1 Avril 2011.

  1. fraid26
    fraid26 WRInaute discret
    Inscrit:
    3 Octobre 2008
    Messages:
    125
    J'aime reçus:
    0
    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 !
     
  2. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 413
    J'aime reçus:
    0
    il faudrait passer par une table intermédiaire qui fusionnerait en une seule colonne les 2 id
     
  3. fraid26
    fraid26 WRInaute discret
    Inscrit:
    3 Octobre 2008
    Messages:
    125
    J'aime reçus:
    0
    Oui ça je peux éventuellement le faire dans une vue, mais ensuite ?

    je ne peux pas faire un group by colonne_magique like '...' ?!
     
  4. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    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.
     
Chargement...
Similar Threads - [SQL] somme spéciale Forum Date
[sql] clé étrangaire Développement d'un site Web ou d'une appli mobile 9 Mai 2014
[SQL] Changement d'etat d'une table au bout de x jours Développement d'un site Web ou d'une appli mobile 26 Avril 2012
[SQL] Meme requete qui ne donne pas le meme résultat Développement d'un site Web ou d'une appli mobile 12 Avril 2012
[SQL] Recherche dans une base de données Développement d'un site Web ou d'une appli mobile 7 Juin 2011
[SQL] Stocker nombre à virgules Développement d'un site Web ou d'une appli mobile 21 Octobre 2010
[SQL] Element pas dans le IN Développement d'un site Web ou d'une appli mobile 23 Février 2010
Google Analytics : Utilisateurs > différence entre Sommes Graphique /normale Débuter en référencement 25 Mai 2020
Site de liste personnelle sommets bloquer le référencement ? Demandes d'avis et de conseils sur vos sites 1 Août 2014
Le site qui consomme plus de CPU sur mon Serveur dédié Administration d'un site Web 27 Août 2013
Plugin de référencement worldpress consomme moins de mémoire sur un serveur Débuter en référencement 14 Mai 2013