IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Comptage de valeurs contenues dans autre colonne


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Comptage de valeurs contenues dans autre colonne
    Bonjour à tous,

    j'ai une table nommée "DATA" qui contient la colonne "Reception_Offres
    " (bit) et les valeurs suivantes :

    Reception_Offres

    True
    False
    True
    True
    False
    True
    True
    True

    je souhaiterai avoir dans une autre table 'RESULT' et une colonne "Somme_Offres" la somme des valeurs "True" contenues dans 'Reception_Offres'

    ce qui donnerait :


    Somme_Offres
    6

    avez-vous une idée ?

    merci d'avance

  2. #2
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonjour,

    Vous pouvez utiliser COUNT()

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Result(SommeOffres) SELECT COUNT(*) FROM DATA WHERE Reception_Offres = 1
    @+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par agemis31 Voir le message
    Bonjour,

    Vous pouvez utiliser COUNT()

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Result(SommeOffres) SELECT COUNT(*) FROM DATA WHERE Reception_Offres = 1
    @+
    Merci beaucoup, la requete fonctionne parfaitement !
    par contre je ne connais pas trop SQL serveur, et j'aimerais que cette requete se mette à jour de façon "dynamique" c'est à dire que les résultats s'actualisent automatiquement au fur et à mesure que les données de la table 'DATA' changent (sans avoir à lancer une requete manuelle)

    merci par avance pour votre aide

  4. #4
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonjour,

    Pour cela, il faut utiliser un trigger, vous aurez à vous brancher sur AFTER INSERT, DELETE (s'il y a des suppressions) et UPDATE (s'il y a des mises à jour).
    Rq: Ce count réprésente une dénormalisation d'information. Si vous pouvez vous en passer, je vous conseille de le faire.

    @+

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous pouvez aussi créer une vue, qui, lorsque vous la requêterez, effectuera le calcul pour vous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE VIEW maVue
    AS
    SELECT mesColonnes,
    		COUNT(*) AS Somme_Offres
    FROM dbo.Data AS D
    INNER JOIN dbo.Result AS R ON D.uneCléDe_D = R.uneCléDe_R
    WHERE R.Reception_Offres = 1
    GROUP BY mesColonnes
    Il vous suffira ensuite de la requêter comme une table (une vue n'est pas comme une table : elle n'a aucune existence physique, sauf si elle est indexée):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT desColonnesDeMaVue
    FROM dbo.maVue
    @++

    P.S : oui-oui dans sa voiture jaune traverse la ville comme un éclair

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par agemis31 Voir le message
    Bonjour,

    Pour cela, il faut utiliser un trigger, vous aurez à vous brancher sur AFTER INSERT, DELETE (s'il y a des suppressions) et UPDATE (s'il y a des mises à jour).
    Rq: Ce count réprésente une dénormalisation d'information. Si vous pouvez vous en passer, je vous conseille de le faire.

    @+
    merci le Trigger fonctionne.

    je cherche désormais à faire la même chose avec un Update (au lieu d'un ajout, puisque ma colonne existe désormais) et là je sèche à nouveau....
    je souhaite mettre à jour 3 colonnes censées contenir la somme des enregistrements d'autres colonnes


    si j'ai 3 colonnes avec INSERT INTO (à 3 reprises dans le Trigger) j'ai :
    il m'insère 3 fois les lignes (insert colonne_a puis, colonne_b, puis_colonne_c)

    somme_a somme_b somme_c
    5 null null
    null 14 null
    null null 7


    en updatant en un seul trigger, je souhaite obtenir :

    somme_a : 5
    somme_b : 14
    somme_c : 7


    merci par avance, ça pourrait me sauver

  7. #7
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonsoir,

    S'il s'agit de vous sauver :-)

    Sur le principe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    UPDATE RESULT
    SET 
    SommeOffres = A.SommeOffres
    ,Sommeb = A.Sommeb
    ,Sommec = A.Sommec
    FROM
    (
    SELECT 
    SUM(CAST(Reception_Offres AS INT))
    ,SUM(CAST(Reception_b AS INT))
    ,SUM(CAST(Reception_c AS INT))
    FROM DATA
    ) A (SommeOffres, Sommeb, Sommec)

    En supposant que vous n'avez qu'une seule ligne déja présente dans votre table RESULT. Les CAST servent à pouvoir utiliser SUM.
    La proposition d'elsuket d'utiliser une vue est une bien meilleure solution.

    @+

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/06/2015, 09h52
  2. Réponses: 3
    Dernier message: 11/03/2010, 11h44
  3. Réponses: 7
    Dernier message: 09/06/2009, 21h51
  4. Liste des valeurs contenue dans une colonne
    Par TimDe dans le forum Excel
    Réponses: 5
    Dernier message: 15/08/2008, 17h11
  5. Réponses: 3
    Dernier message: 13/06/2006, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo