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

Access Discussion :

switch ou case/when?


Sujet :

Access

  1. #1
    Membre régulier

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 104
    Points
    104
    Par défaut switch ou case/when?
    Bonjour,
    J'aurais voulu utiliser la fonction case...when bien connu sur Oracle mais ça n'existe pas sur Access. Alors, en parcourant la FAQ, j'ai vu qu'il y a une alternative: switch. Je n'arrive pas à la faire fonctionner.

    J'ai taper ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT month(T_Movement.Date) & "/" & year(T_Movement.Date) AS Mois,
    SWITCH( T_Movement.Type=2, Sum(T_Movement.Amount)) as Credit,
    SWITCH( T_Movement.Type=1, Sum(T_Movement.Amount)) as Debit
     
    FROM  T_Movement
     
    GROUP BY month(T_Movement.Date), year(T_Movement.Date)
    ORDER BY Year(T_Movement.Date);
    Je veux mettre dans la colonne Debit, tous les records de type 1 et les records de type 2 dans la colonne Credit.

    Quand je passe en mode données, il me met: "expression switch... as part of an agregate function".

    Qqn sait ce que ça veut dire?

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Il axiste aussi IIF(...)

  3. #3
    Membre régulier

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 104
    Points
    104
    Par défaut
    J'ai la même erreur avec Iif(...)!

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Tous les champs du select doivent figurer dans le group by s'ils ne sont pas soumis à une fonction de regroupement

  5. #5
    Membre régulier

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 104
    Points
    104
    Par défaut
    Merci Tofalu,
    J'ai ajouté cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY month(T_Movement.Date),  year(T_Movement.Date), T_Type.Name
    Je ne comprends pas très bien pourquoi il faille ajouter "T_Type.Name" dans le "group by". Je croyais qu'on mettait seulement les champs qu'on veut regrouper. En l'occurence, je veux ici, regrouper par année et par mois.

    Par ailleurs, le résultat n'est pas probant. Je me retrouve avec deux lignes par mois: une pour "credit" et une pour "debit". Je voudrais une seule et même ligne par mois.

    Avec la fonction case...when sur Oracle, j'arrive à une seule ligne par mois. D'ailleurs, je mets seulement "Date" dans le "group by"
    Que faudrait-il faire dans le cas Access?

  6. #6
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Citation Envoyé par Cupidon
    J'ai la même erreur avec Iif(...)!

    Peux-tu nous montrer ta requête modifiée ?

  7. #7
    Membre régulier

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 104
    Points
    104
    Par défaut
    pc75, maintenant que j'ai rajouté T_Type.Name dans le "group by", ça marche bien aussi bien pour "switch" que pour "iif". Seulement, le résultat donné n'est pas terrible (voir message précédent).

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TRANSFORM Sum(amount) AS montant
    SELECT Month([madate]) & Year([madate]) AS moisan
    FROM matable
    GROUP BY Month([madate]) & Year([madate])
    PIVOT IIf([typemvt]="1","DEBIT","CREDIT") in ("DEBIT","CREDIT");

  9. #9
    Membre régulier

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 104
    Points
    104
    Par défaut
    Merci Random, c'est intéressant cette fonction "pivot iif"!

    Seulement, il ne fait pas vraiment ce qu'on voulait.
    Il fait la somme debit+credit et il range le résultat dans la colonne "credit".
    Normal?

  10. #10
    Membre régulier

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 104
    Points
    104
    Par défaut
    En remplaçant la dernière ligne par:
    Ca me donne bien deux colonnes (Debit et Credit) avec les sommes des montants, le tout regrouper par mois. C'est génial.

    Maintenant, j'essaie de voir comment on pourrait ajouter une troisième colonne (solde) qui serait la différence entre les deux précédentes.

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    TRANSFORM Sum(matable.amount) AS montant
    SELECT Month([madate]) & Year([madate]) AS moisan, Sum(IIf([typemvt]="1",-[amount],[Amount])) AS solde
    FROM matable
    GROUP BY Month([madate]) & Year([madate])
    PIVOT IIf([typemvt]="1","DEBIT","CREDIT") In ("DEBIT","CREDIT");

Discussions similaires

  1. CASE WHEN <> SWITCH CASE (c) ?
    Par Gouzoul dans le forum PL/SQL
    Réponses: 3
    Dernier message: 11/03/2009, 14h10
  2. case/when avec plusieurs valeurs pour le then
    Par Neo41 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2005, 15h58
  3. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 08h20
  4. Structure CASE WHEN en Interbase
    Par tchaman dans le forum InterBase
    Réponses: 8
    Dernier message: 13/12/2004, 16h18
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50

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