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 :

Modification du resultat d'une requête


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Par défaut Modification du resultat d'une requête
    Bonjour
    j'ai cette requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT s.id_serv,s.id_cata,s.id_app,d.id_dom,
    ssj.date,ssj.obj_sauve,ssj.vol_sauve,
    ssj.nb_sauve,ssj.err_sauve,ssj.obj_rest,
    ssj.vol_rest,ssj.nb_rest,ssj.err_rest 
    FROM serveurs s
    join stat_serveur_jour ssj on s.id_serv=ssj.id_serv
    join applis a on s.id_app=a.id_app
    join groupe_app ga on a.id_app=ga.id_app
    join domaines d on ga.id_dom=d.id_dom
    WHERE s.id_serv=ssj.id_serv  
    AND ssj.date=to_date('28/03/2010', 'DD/MM/YYYY') 
    ORDER BY s.id_serv,ssj.date,s.id_app;
    J'ai ce type de resultat
    660 | 144 | 285 | 369 | 2010-03-28 | 2728 | 120 | 2 | 0 | 0 | 0 | 0 | 0
    660 | 144 | 285 | 104 | 2010-03-28 | 2728 | 120 | 2 | 0 | 0 | 0 | 0 | 0
    660 | 144 | 285 | 353 | 2010-03-28 | 2728 | 120 | 2 | 0 | 0 | 0 | 0 | 0
    660 | 144 | 285 | 368 | 2010-03-28 | 2728 | 120 | 2 | 0 | 0 | 0 | 0 | 0
    On voit que tout est identique sauf la quatrieme colonne.
    J'aimerais avoir ce type de résultat
    660 | 144 | 285 | 369 | 104 | 353 | 368 | 2010-03-28 | 2728 | 120 | 2 | 0 | 0 | 0 | 0 | 0
    Si quelqu'un a une idée, je suis preneur
    D'avance merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Par défaut
    Bonjour,

    J'espere que cela pourra aider d'autres personnes
    Creation de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE FUNCTION concat2(text, text) RETURNS text AS '
        SELECT CASE WHEN $1 IS NULL OR $1 = \'\' THEN $2
                    WHEN $2 IS NULL OR $2 = \'\' THEN $1
                    ELSE $1 || \' | \' || $2
                    END; 
     '
     LANGUAGE SQL;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE AGGREGATE concatene (
        sfunc = concat2,
        basetype = text,
        stype = text,
        initcond = ''
    );
    Maintenant ma requete, il suffit d'y rajouter un GROUP BY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT s.id_serv,s.id_cata,s.id_app,concatene(d.id_dom),
    ssj.date,ssj.obj_sauve,ssj.vol_sauve,
    ssj.nb_sauve,ssj.err_sauve,ssj.obj_rest,
    ssj.vol_rest,ssj.nb_rest,ssj.err_rest 
    FROM serveurs s
    JOIN stat_serveur_jour ssj ON s.id_serv=ssj.id_serv
    JOIN applis a ON s.id_app=a.id_app
    JOIN groupe_app ga ON a.id_app=ga.id_app
    JOIN domaines d ON ga.id_dom=d.id_dom
    WHERE s.id_serv=ssj.id_serv  
    AND ssj.date=to_date('28/03/2010', 'DD/MM/YYYY') 
    group by s.id_serv,s.id_cata,s.id_app,
    ssj.date,ssj.obj_sauve,ssj.vol_sauve,
    ssj.nb_sauve,ssj.err_sauve,ssj.obj_rest,
    ssj.vol_rest,ssj.nb_rest,ssj.err_rest 
    ORDER BY s.id_serv,ssj.date,s.id_app;
    Maintenant voici la réponse.
    660 | 144 | 285 | 369 | 104 | 353 | 368 | 2010-03-28 | 2728 | 120 | 2 | 0 | 0 | 0 | 0 | 0
    La réponse me convient.
    Mais maintenant, je me pose des questions.
    Car je voudrais que la colonne concatene qui possede de 1 à 8 valeurs, je puisse les inserer separement.
    Est-ce possible ?
    D'avance merci

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Par défaut
    Bonjour,

    concernant mon probleme d'insertion, j'ai reussi à m'en sortir en générant un script sql à partir d'un script UNIX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    while read ligne
    do
    serv=`echo $ligne|awk -F"|" '{printf ("%d",$1)}'`
    date=`echo $ligne|awk -F"|" '{printf ("%s",$2)}'`
    val1=`echo $ligne|awk -F"|" '{printf ("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)}'`
    dom2=`echo $ligne|awk -F"|" '{if(NF>=13){printf ("%d",$13)} else {print "null"}}'`
    dom3=`echo $ligne|awk -F"|" '{if(NF>=14){printf ("%d",$14)} else {print "null"}}'`
    dom4=`echo $ligne|awk -F"|" '{if(NF>=15){printf ("%d",$15)} else {print "null"}}'`
    dom5=`echo $ligne|awk -F"|" '{if(NF>=16){printf ("%d",$16)} else {print "null"}}'`
    dom6=`echo $ligne|awk -F"|" '{if(NF>=17){printf ("%d",$17)} else {print "null"}}'`
    dom7=`echo $ligne|awk -F"|" '{if(NF>=18){printf ("%d",$18)} else {print "null"}}'`
    dom8=`echo $ligne|awk -F"|" '{if(NF>=19){printf ("%d",$19)} else {print "null"}}'`
    echo insert into tab_stat_app_jour
    echo "values ($serv,'$date',$val1,$dom2,$dom3,$dom4,$dom5,$dom6,$dom7,$dom8);"
    done<servdom300310.txt>scr_servdom300310.sql
    Et voici la reponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into tab_stat_app_jour
    values (9929 ,' 2010-03-28 ', 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 104 , 308 , 366 , 353 , 367,null,null,null);

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Par défaut
    Je reviens vers vous concernant cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE FUNCTION concat2(text, text) RETURNS text AS '
        SELECT CASE WHEN $1 IS NULL OR $1 = \'\' THEN $2
                    WHEN $2 IS NULL OR $2 = \'\' THEN $1
                    ELSE $1 || \' | \' || $2
                    END; 
     '
     LANGUAGE SQL;
    En effet, je dois l'integrer dans un script perl, mais les variables $1 et $2 sont des variables réserves. J'aimerai savoir si il serait possible de les renommer
    D'avance merci

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Il faut utiliser un opérateur de Perl qui n'interpole pas les variables (en l'occurrence ici $1 et $2) et qui en plus laisse inchangées les apostrophes et antislashs. Le plus simple ici est probablement l'opérateur dit here-doc dans sa version avec apostrophes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     # code perl
    my $sql = <<'EOFUNCTION';
    CREATE FUNCTION etc... (code SQL)
     
    EOFUNCTION
    # suite du code perl

  6. #6
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Par défaut
    Merci,

    j'essaie de faire la modification et je vous tiens au courant

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

Discussions similaires

  1. Impossible d'exporter le resultat d'une requête
    Par uloaccess dans le forum Access
    Réponses: 5
    Dernier message: 21/02/2008, 19h20
  2. affichage du resultat d'une requête
    Par PAUL87 dans le forum Access
    Réponses: 3
    Dernier message: 25/09/2005, 20h12
  3. Resultat d'une requête dans TEdit
    Par the watcher dans le forum Connexion aux bases de données
    Réponses: 5
    Dernier message: 08/09/2005, 18h00
  4. [SQL Server] Limiter le resultat d'une requête
    Par obiwan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/06/2004, 11h25
  5. Proposer le resultat d'une requête en téléchargement
    Par Lux interior dans le forum XMLRAD
    Réponses: 5
    Dernier message: 17/02/2003, 15h44

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