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

Langage SQL Discussion :

champ à partir du calcul d'un autre champ


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut champ à partir du calcul d'un autre champ
    Bonjour,

    j'ai une table Item avec

    -numId,
    -titre,
    -EnVente (int),

    il me faut la table de résultat suivante :


    ---------------------------------------------------
    Titre--------Nbre vendu----------Nbre a vendre
    ---------------------------------------------------
    tintin-----------1----------------------2
    Milou-----------0----------------------2

    Sachant que je sais si le livre est à vendre ou vendu d'après le champ EnVente(0 ou 1)

    j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select titre, count(Envente) as nb from item group by numItem,Envente
    Mais je bloque au niveau de la conception du nom du champ vendu ou en vente..

    vous auriez une idée ? ah oui je suis sous mysql 5
    merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Salut,
    En considérant que l'item est vendu si Envente est à 0, et à vendre s'il est à 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT titre, sum(decode(Envente,0,1,0)) AS nb_vendu, sum(Envente) as nb_avendre FROM item GROUP BY titre

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    merci mais la fonction decode n'existe pas en mysql, il faut utiliser case, mais ça ne fonctionne pas non plus, je voulais faire un case (enVente) when '1' then count(enVente) mais on ne peut pas le faire,
    j'ai fait une union

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select titre, count(enVente) as nb_vendu, 0 as nbEnVente
    from maTable
    where enVente=0
    group by numItem
    union 
    select titre, count(enVente) as nb_vendu, 0 as nbEnVente
    from maTable
    where enVente=1
    group by numItem
    mais peut etre y a t-il plus court

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Salut,
    En considérant que l'item est vendu si Envente est à 0, et à vendre s'il est à 1 :
    enVente = 0,1 ou 2 ou 3 ect...
    mais seul 0 vendu et 1 enVente m'intéresse

    Merci

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Peut etre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    	   titre, 
    	   sum(case Envente when 0 then 1 else 0 end) as nb_vendu,
    	   sum(Envente) AS nb_avendre
    FROM item 
    where Envente in (0,1)
    GROUP BY titre

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    ça fonctionne merci,

    par contre mon union ne fonctionne pas ça me donne deux lignes pour un meme livre

    -------------------------------------
    titre---nb_vendus-----nb_Envente
    ------------------------------------
    tintin 1 0
    tintin 0 1

    pourtant je n'ai pas de group by enVente donc ça devrait bien me donner ça non ?

    -------------------------------------
    titre---nb_vendus-----nb_Envente
    ------------------------------------
    tintin 1 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select numItem,titre, count(enVente) as nb_vendu, 0 as nbEnVente
    from maTable
    where enVente=0
    group by numItem
     
    union
     
    select numItem,titre, 0 as nb_vendu, count(enVente) as nbEnVente
    from maTable
    where enVente=1
    group by numItem

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    C'est normal que ton union affiche le resultat sur deux lignes.
    Si tu veux le faire avec union, ce serait plutot ça, pour ramner tes resultats par numitem/titre sur une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select numitem, titre, sum(nb_vendu) as nb_vendu, sum(nbEnVente) as nbEnVente
    (	   
    SELECT numItem,titre, count(enVente) AS nb_vendu, 0 AS nbEnVente
    FROM maTable
    WHERE enVente=0
    GROUP BY numItem, titre
    union
    SELECT numItem,titre, 0 AS nb_vendu, count(enVente) AS nbEnVente
    FROM maTable
    WHERE enVente=1
    GROUP BY numItem, titre
    )
    group by numitem, titre

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Ok merci, mais bon ta méthode est plus courte donc je vais l'utiliser.
    Merci

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Je t'en prie.
    N'oublie pas le tag 'résolu' pour la lisibilité du forum, merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 28/06/2010, 16h49
  2. [AC-2003] Insertion champ à partir du filtrage de 2 autres champ
    Par delorvallois dans le forum Modélisation
    Réponses: 6
    Dernier message: 13/10/2009, 17h17
  3. Réponses: 11
    Dernier message: 08/01/2008, 11h36
  4. Réponses: 4
    Dernier message: 25/09/2006, 14h36
  5. Réponses: 5
    Dernier message: 02/08/2006, 13h29

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