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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    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
    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
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

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

    Il axiste aussi IIF(...)

  3. #3
    Membre confirmé

    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
    Par défaut
    J'ai la même erreur avec Iif(...)!

  4. #4
    Expert éminent

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    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 confirmé

    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
    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
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    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 confirmé

    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
    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
    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");

Discussions similaires

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

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