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

Langage SQL Discussion :

Problème sous requête sql


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Problème sous requête sql
    Bonjour,

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select RANK_VAC_PERE.PAYVAC, RANK_VAC_PERE.NUVACH, PLACEM
     from RANK_VAC_PERE 
    INNER JOIN VACHES on RANK_VAC_PERE.payvac = vaches.payvac 
    and RANK_VAC_PERE.nuvach = vaches.nuvach
    where CRITER = 'ISU' 
    and vaches.nuelev = '15001293' 
    and vaches.payelv = 'FR'
    and rank_vac_pere.nupere = vaches.nupere


    Cette requête affiche un code pays, un numéro et un classement. Sans rentrer dans les détails les jointures ainsi que les conditions dans le where doivent être laissé tel quel.

    Je souhaite afficher après le classement, le nombre de participants sous la forme classement/nb participants (exemple 78/800).
    On obtient le nombre de participants en faisant la requête suivante :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    select count(nuvach)from rank_vac_pere where nupere = '?'  and criter = 'ISU';
    De même pour cette requete les conditions du where doivent être laissé tel quel.

  2. #2
    Expert éminent
    Bonjour,
    Si tu ne peux modifier ni les jointures, ni le where de la première requête, je ne vois pas comment tu peux ajouter une sous-requête.

    Sinon il suffit de modifier la deuxième requête pour ajouter la colonne payvac, l'ajouter dans les jointures de la première (en faisant le lien sur la même colonne), et enfin d'ajouter "le count(nuvach)" de la sous-requête (enfin son alias).
    Mais il faut modifier les jointures de la première…

    Tatayoi

  3. #3
    Modérateur

    Quelque chose comme ça :
    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
    17
    18
    19
    select  RNK.PAYVAC
        ,   RNK.NUVACH
        ,   PLACEM
        ,   CNT.TOTAL
    from    RANK_VAC_PERE   as  RNK 
        inner join 
            VACHES          as  VCH 
            on  RNK.PAYVAC = VCH.PAYVAC 
            and RNK.NUVACH = VCH.NUVACH
            and RNK.NUPERE = VCH.NUPERE
        cross join
            (   select  count(NUVACH)   as  TOTAL
                from    RANK_VAC_PERE 
                where   NUPERE = '?'  
                    and CRITER = 'ISU'
            )   as   CNT
    where   RNK.CRITER = 'ISU' 
        and VCH.NUELEV = '15001293' 
        and VCH.PAYELV = 'FR'
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  4. #4
    Nouveau membre du Club
    Finalement j'ai réussi enfaisant comme ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.PAYVAC, t1.NUVACH, CONCAT(CONCAT(PLACEM, '/'),(SELECT COUNT(t1.NUVACH) FROM RANK_VAC_PERE t1 JOIN VACHES t2 ON t1.PAYVAC = t2.PAYVAC AND t1.NUVACH = t2.NUVACH AND t1.NUPERE = t2.NUPERE and t1.NUPERE = '?')) AS CLASSEMENT
    FROM RANK_VAC_PERE t1 JOIN VACHES t2 ON t1.PAYVAC = t2.PAYVAC 
    AND t1.NUVACH = t2.NUVACH 
    AND t1.NUPERE = t2.NUPERE 
    AND t1.CRITER = 'ISU'
    AND t2.NUELEV = '15001293' 
    AND t2.PAYELV = 'FR';