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

Firebird Discussion :

Tableau croisé(?) avec SQL


Sujet :

Firebird

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut Tableau croisé(?) avec SQL
    Bonjour,

    J'ai un tableau et je me demandais si c'était possible d'utiliser SQL pour le générer..

    Le tableau suivant :

    Domaine d'activité | Nbre d'entreprises privées | Nbr entr. public| TOTAL
    ....Pêche........................ 18..............................22
    ....Agriculture.................. 25..............................30
    ..........

    ....TOTAL
    Sachant que le statut Public et privé est un champ (statut juridique : SJ) dans la table entreprise :

    Entreprise(NumEnt, Nom, SJ, ...)
    EntrepriseDomaine(NumEnt,NumDomaine,..)
    Domaine(NumDomaine,...)

    J'utilise Firebird 2.1

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    oui avec un CASE par exemple

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut
    J'ai déjà utilisé le CASE dans mes requêtes.. la, je ne vois pas comment je pourrais l'utiliser pour mon tableau..

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 659
    Billets dans le blog
    65
    Par défaut
    Et avec des CTE ? depuis que je les ai découvertes j'en use et abuse (<- peut être trop)

    faute de temps cette proposition est non testée

    Code SQL : 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
     
    WITH PUB AS (
    SELECT ED.NUMDOMAINE ,COUNT(*) AS PUBLIQUES FROM 
    ENTREPRISE E JOIN ENTREPRISEDOMAINE  ED 
    ON  E.NUMENT=ED.NUMENT
    WHERE E.SJ='Public'                        // ici je n''ai pas compris le SJ
    GROUP BY 1)
              PRIV AS (SELECT ED.NUMDOMAINE ,COUNT(*) AS PRIVEES FROM 
    ENTREPRISE E JOIN ENTREPRISEDOMAINE  ED 
    ON  E.NUMENT=ED.NUMENT
    WHERE E.SJ='Privé'                        // ici je n''ai pas compris le SJ
    GROUP BY 1)
     
    SELECT D NUMDOMAINE,D.NOM,COALESCE(PUB.PUBLIQUES,0) AS NBPUB,COALESCE(PRIV.PRIVEES,0) AS NBPRIV, COALESCE(PUB.PUBLIQUES,0)+COALESCE(PRIV.PRIVEES,0) AS TOTAL
    FROM DOMAINE D LEFT JOIN PUB ON D.NUMDOMAINE=PUB.NUMDOMAINE
    LEFT JOIN PRIV ON D.NUMDOMAINE=PRIV.NUMDOMAINE

    J'entrevois également la solution avec les case certainement plus simple cependant , Faute de temps .....
    J'eusse aimé avoir le script de création des tables et un jeu d'essai

    faute de temps cette proposition est non testée

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Citation Envoyé par fhamdad Voir le message
    J'ai déjà utilisé le CASE dans mes requêtes.. la, je ne vois pas comment je pourrais l'utiliser pour mon tableau..
    pourtant un classic

    en pseudo sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select domaine, sum(case sj = privé then 1 else 0 end) privé, sum(case sj = public then 1 else 0 end) public, count(*) total
    from matable
    group by domaine

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut
    waw!! :-)

    c'est vrai que c'est élémentaire! mais je ne l'avais pas vu!

    Merci Makowski! Merci à toi aussi sergio!

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut
    Cette solution fonctionne à merveille! Mais.. c'est plutôt statique non?

    Si d'autres statuts juridiques s'ajoutent à la base de données, on est obligé d'intervenir sur la requête...

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

Discussions similaires

  1. SQL Reporting, Tableau croisé avec paramètre
    Par Saintelaitlait dans le forum VB.NET
    Réponses: 0
    Dernier message: 15/09/2011, 16h24
  2. Tableau croisé avec tranche horraire
    Par Charly_An dans le forum Deski
    Réponses: 4
    Dernier message: 01/07/2008, 00h09
  3. Créer un tableau croisé avec 4 données
    Par valalu dans le forum IHM
    Réponses: 1
    Dernier message: 19/07/2007, 06h59
  4. Tableau croisé avec BIRT
    Par soumou dans le forum BIRT
    Réponses: 1
    Dernier message: 08/09/2006, 09h21

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