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 :

problème de vue


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 problème de vue
    bonjour tout le monde
    je veux une somme qui doit venir des deux vues suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view vue1 (colonne1) as select colonneA from table 1 ;
    cette vue amène 150
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view vue2 (colonne2) as select colonneB from table2 ;
    cette vue amène un champ vide , car la colonneB est aussi vide .
    donc si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view vuesomme (somme) as select sum((colonne1)+(colonne2)) from vue1 natural join vue2 ;
    il m'amène un champ vide , il considère pas les 150;

    par contre si je récrée les 2 vues sur deux champs qui contiennent tous une valeur réelle , il donne la somme réelle ;
    aisez moi s'il vous plait

  2. #2
    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 une somme qui doit venir des deux vues suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view vue1 (colonne1) as select colonneA from table 1 ;
    cette vue amène 150
    «Amène 150», qu'est-ce que ca veut dire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view vuesomme (somme) as select sum((colonne1)+(colonne2)) from vue1 natural join vue2 ;
    Sinon pour répondre à votre question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    test=# SELECT 3+NULL AS somme;
     somme
    -------
      NULL
    ce qui n'est pas surprenant étant donné que NULL ~ 'Pas défini'.

    Pour ce qui est de la fonction SUM, il s'agit d'un agrégat dont la fonction de transition est marquée strict, ie qu'elle n'est pas appelée pour des entrées NULL. Donc un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SUM(prix) FROM factures;
    renverra la somme des montants des factures éditées (i.e prix non NULL)

    Donc si on revient à votre cas:

    colonne1+colonne2 renverra NULL à chaque fois que l'une de deux valeurs vaut NULL et donc ne sera pas pris en compte par l'agrégat SUM et donc si colonne2 contient que des NULL alors evidemment le résultat final sera NULL.

    Ensuite à propos de votre jointure. Comme vos vues n'ont pas de colonne de même nom, cela revient à faire un produit cartésien ie la même chose que si vous aviez écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE VIEW vuesomme (somme) AS
    SELECT SUM(colonne1+colonne2) 
    FROM vue1, vue2
    Etais-ce vraiment ce que vous vouliez ? Ne vouliez-vous pas simplement ajouter les nombres de colonne1 à ceux de colonne2 ?

  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
    "Amène 150" je voulais dire que le résultat de la vue est 150;
    merci beaucoup j'ai reussi àn résoudre le problème grâce à la fonction COALESCE en faisant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE VIEW vue2 (colonne2) AS SELECT coalesce( colonneB,0) FROM table2 ;
    ici coalesce renvoie le premier argument non nul sinon il renvoie 0 qui sera pris en compte dans la somme .

    j'ai une autre question s'il vous plait .
    quand j'écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create view mavue (champ1) as 
    select 
      case when champ2=1 then 1
         else 0 
      end 
     from matable
    il marche bien car il renvoi le résultat désireux , mais parcontre il renvoie 36 enregistrements et moi j'en ai 6 dans ma table , il multiplie le nbre d'enregistrement dans la table par 6 pour en faire 36 et moi j'en veux 6 .
    merci de vore aide

  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
    "Amène 150" je voulais dire que le résultat de la vue est 150;
    Ouai... Dites, par curiosité, vos exercices sur lesquels vos planchez viennent d'où ? Je les trouve bizarre ...

    j'ai une autre question s'il vous plait .
    L'usage - et le bon sens - exige que vous lanciez une nouvelle discussion et que vous indiquiez que votre problème est résolu puisqu'il l'est.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    Merci d'indenter vos requête pour une plus grande lisibilité.

    La solution est de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW vuesomme (somme) 
    AS 
       SELECT sum(COALESCE(colonne1, 0) + COALESCE(colonne2, 0)) 
       FROM   vue1 
              FULL OUTER JOIN vue2
                    ON vue1.??? = vue2.???
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Problème de vue
    Par tiyolx dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 27/11/2008, 09h44
  2. Envoie de Mail # Problème de vue
    Par captainflex dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 07/09/2008, 13h11
  3. Problèmes de vue indéxée
    Par The eye dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/03/2008, 00h25
  4. Problème de vue Datasheet sous sharepoint
    Par FiCuS dans le forum SharePoint
    Réponses: 1
    Dernier message: 23/10/2007, 11h04

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