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

Requêtes PostgreSQL Discussion :

clause where dans une requette


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 40
    Points : 32
    Points
    32
    Par défaut clause where dans une requette
    bonjour tout le monde
    je veux créer une vue qui doit calculer la somme des valeurs d'une colonne si les conditions dans la clause WHERE sont bien remplis , j'ai procédé comme ça ;

    create view mavue (col1,col2) as select col1,sum(col2) from matable where col 3 = {24 ou 28} or col4= "Z" or col5 =[1..8 ] or col6="Z" ;
    il plante.

    comme vous remarquez certaines colonnes doivent prendre leurs valeurs dans un ensemble dans la clause where ; c'est à dire je dois comparer mes colonnes de la clause where à cet intervalle là:
    24Z01Z à 24Z08Z ou 28Z01Z à 28Z08Z.
    j'ai besoin d'aide s'il vous plait

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 736
    Points
    1 736
    Par défaut
    Si ton champ est une chaîne de caractères de longueur fixe 6, tu peux faire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where (champ between '24Z01Z' and '24Z08Z') 
    or (champ between '28Z01Z' and '28Z08Z')

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    mais c'est que j'ai 4 champs de longueur variable biensûr , la comparaison doit être faite de cette manière : champ1 doit être egal soit à 24 ou à 28 , champ2 doit être egal à Z , champ3 doit prendre sa valeur dans l'intervalle [1..8] dans le cas compris et champ4 doit être egale à Z .
    ce sont ces conditions qui doivent être rempli pour que la sommation ait lieu .
    merci

  4. #4
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par bennkabazz Voir le message
    bonjour tout le monde
    je veux créer une vue qui doit calculer la somme des valeurs d'une colonne si les conditions dans la clause WHERE sont bien remplis , j'ai procédé comme ça ;

    create view mavue (col1,col2) as select col1,sum(col2) from matable where col 3 = {24 ou 28} or col4= "Z" or col5 =[1..8 ] or col6="Z" ;
    il plante.
    Déjà la syntaxe n'est pas correcte.
    est a remplacer par ou à remplacer par à remplacer par ou Et enfin vous utilisez sum, une fonction d'agrégat. Il faut donc mettre l'autre colonne dans une clause GROUP BY.

    Finalement, une fois corrigée cela donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE VIEW mavue AS
    SELECT col1, sum(col2) AS somme
    FROM matable
    WHERE col3 IN (24,28)
        OR col4 = 'Z'
        OR col5 BETWEEN 1 AND 8
        OR col6 = 'Z'
    GROUP BY col1
    La vue va vous retourner la somme des elements de col2 pour chaque valeur de col1 alors que vous vouliez la somme des elements de col2 si j'ai bien compris.

    comme vous remarquez certaines colonnes doivent prendre leurs valeurs dans un ensemble dans la clause where ; c'est à dire je dois comparer mes colonnes de la clause where à cet intervalle là:
    24Z01Z à 24Z08Z ou 28Z01Z à 28Z08Z.
    J'ai rien compris.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    je vous remercie très bien pour cette aide ;
    mais on s'est pas bien compris , je vous reexplique alors :
    je fais une vue qui doit faire la somme des éléments d'une colonne "toto" en considerant "1" comme valeur de la colonne si ces conditions sont remplis au même moment : col1 IN (24,28) , col2 = "Z" , col3>=1 AND col5<=8 , col4 = 'Z' et considerer "toto" comme "0" au cas où une de ces conditions est fausse à fortiori toutes , cela pour toutes les lignes de ma table et me retourne "somme".
    NB: desolé , je devrais mettre "and" au lieu de "or" dans le premier message.
    merci beaucoup d'avance.

  6. #6
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par bennkabazz Voir le message
    je vous remercie très bien pour cette aide ;
    mais on s'est pas bien compris , je vous reexplique alors :
    je fais une vue qui doit faire la somme des éléments d'une colonne "toto" en considerant "1" comme valeur de la colonne si ces conditions sont remplis au même moment : col1 IN (24,28) , col2 = "Z" , col3>=1 AND col5<=8 , col4 = 'Z' et considerer "toto" comme "0" au cas où une de ces conditions est fausse à fortiori toutes , cela pour toutes les lignes de ma table et me retourne "somme".
    En bref, vous voulez connaitre le nombre de lignes filtrées. Dans ce cas utilisez l'agrégat COUNT.

Discussions similaires

  1. [AC-2010] Clause WHERE dans une requète
    Par Brëzz dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 12/04/2013, 15h38
  2. Pb de requete SQL avec clauses WHERE dans une procédure stockée
    Par CocoLeNain dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/06/2010, 23h48
  3. Réponses: 2
    Dernier message: 29/01/2007, 13h41
  4. Réponses: 3
    Dernier message: 11/12/2005, 11h15
  5. Réponses: 1
    Dernier message: 09/12/2005, 23h34

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