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 et SQL. Discussion :

Requete d'analyse croisée


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 79
    Points
    79
    Par défaut Requete d'analyse croisée
    Voici mon probléme :

    J'ai deux requetes d'analyse croisée A et B dont l'une est la transposé de l'autre. Chacune d'entre elle a un total en entete de ligne qui calcul la somme des réponses pour chaque valeur associée à l'entete de colonne.

    Je soushaite transposer la colonne total de A en ligne et pouvoir la fusioner à B.
    L'interet pour moi est en fait d'avoir les deux types de total sur une meme restitution.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 79
    Points
    79
    Par défaut
    je vais essayer de préciser ma réponse avec des bouts de code, peut etre que cela sera plus parlant :

    requete A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM Max(IIf([Inclus]=0,"","Oui")) AS Expr1
    SELECT Perimetre_Fonctionnel.Domaine_Fonctionnel, Sum(Abs([Inclus])) AS Total
    FROM SIRH INNER JOIN (Perimetre_Fonctionnel INNER JOIN SIRH_Perimetre_Fonctionnel ON Perimetre_Fonctionnel.id = SIRH_Perimetre_Fonctionnel.id_Perimetre_Fonctionnel) ON SIRH.id_SIRH = SIRH_Perimetre_Fonctionnel.id_SIRH
    GROUP BY Perimetre_Fonctionnel.Domaine_Fonctionnel
    PIVOT SIRH.id_SIRH;
    requete B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM Max(IIf([Inclus]=0,"","Oui")) AS Expr1
    SELECT SIRH.id_SIRH, Sum(Abs([Inclus])) AS Total
    FROM SIRH INNER JOIN (Perimetre_Fonctionnel INNER JOIN SIRH_Perimetre_Fonctionnel ON Perimetre_Fonctionnel.id = SIRH_Perimetre_Fonctionnel.id_Perimetre_Fonctionnel) ON SIRH.id_SIRH = SIRH_Perimetre_Fonctionnel.id_SIRH
    GROUP BY SIRH.id_SIRH
    PIVOT Perimetre_Fonctionnel.Domaine_Fonctionnel;
    ce que j'ai mis en gras, je veux le transposé en ligne pour faire une union sur B

    merci d'avance

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut pev15 et bienvenu,

    regarde ici
    sinon j'ai déjà vu des codes de transposition sur le net mais je ne saurais te donner de lien.
    toutefois cela me parait un peu lourd car tous ce que j'ai vu crée une table.
    je n'ai pas le temps de regarder ton code de plus près mais je pense qu'il n'est pas impossible d'avoir via une requete unique.

    bonne continuation,

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 94
    Points : 79
    Points
    79
    Par défaut
    Merci de ta réponse Vodiem.

    Cependant j'aimerais une solution qui n'utilise pas VB, mais seulement du SQL ou des requetes imbriquées. Personne n'a rencontré un probléme similaire ?

    Cordialement,

    pev15

  5. #5
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    tu peux faire une transposition avec une sélection de chaque champ à partir de la fonction de domaine Dlookup() (voir éventuellement avec requete imbriqué) mais le nb de colonne est prédéfini:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DLookUp("Total","RequeteA","Domaine_Fonctionnel='valeur$'") as DF1,
    DLookUp("Total","RequeteA","Domaine_Fonctionnel='valeur$'") as DF2,
    DLookUp("Total","RequeteA","Domaine_Fonctionnel='valeur$'") as DF3 ...
    ou refaire une transposition à partir d'une requete d'analyse croisée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM First(RequeteA.Total) AS LeTotal
    SELECT 1 as Indice
    FROM RequeteA
    GROUP BY 1
    PIVOT RequeteA.Domaine_Fonctionnel;
    je te laisse le soin d'adapter les champs avant l'union.

Discussions similaires

  1. probleme sur requete d'analyse croisée
    Par sebastien97 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/06/2007, 15h22
  2. Réponses: 2
    Dernier message: 28/03/2007, 23h26
  3. Réponses: 2
    Dernier message: 28/03/2007, 08h59
  4. [Etat] Requete d'analyse croisée
    Par Boolean69 dans le forum IHM
    Réponses: 1
    Dernier message: 25/08/2006, 19h05
  5. [ACCESS] requete d'analyse croisée?
    Par Junior_jef dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/02/2006, 11h14

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