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

Deski Discussion :

Calcul de l'âge avec une condition sur indicateur


Sujet :

Deski

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 113
    Points
    113
    Par défaut Calcul de l'âge avec une condition sur indicateur
    Bonjour,

    J'ai un objet qui calcule l'âge en fonction de la date de naissance.
    Le SQL de cet objet est défini sur le modèle "CASE WHEN ... THEN ... ELSE ... END".

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
      case 
    when (datepart(day, PERSONNE.DANAIS)>datepart(day,getdate()) and datepart(month, PERSONNE.DANAIS)=datepart(month,getdate())) or (datepart(month, PERSONNE.DANAIS)>datepart(month,getdate()))  then
     datediff(year, PERSONNE.DANAIS,getdate()) -1
    else
     datediff(year, PERSONNE.DANAIS,getdate())
    end
    FROM
      PERSONNE
    Jusqu'ici, pas de problème.

    Lorsque j'ajoute une condition sur un objet de type indicateur (somme), ça ne marche plus !

    Exemple :
    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
    20
    SELECT
      case 
    when (datepart(day, PERSONNE.DANAIS)>datepart(day,getdate()) and datepart(month, PERSONNE.DANAIS)=datepart(month,getdate())) or (datepart(month, PERSONNE.DANAIS)>datepart(month,getdate()))  then
     datediff(year, PERSONNE.DANAIS,getdate()) -1
    else
     datediff(year, PERSONNE.DANAIS,getdate())
    end
    FROM
      PERSONNE
    GROUP BY
      case 
    when (datepart(day, PERSONNE.DANAIS)>datepart(day,getdate()) and datepart(month, PERSONNE.DANAIS)=datepart(month,getdate())) or (datepart(month, PERSONNE.DANAIS)>datepart(month,getdate()))  then
     datediff(year, PERSONNE.DANAIS,getdate()) -1
    else
     datediff(year, PERSONNE.DANAIS,getdate())
    end
    HAVING
      ( 
      sum(PERSONNE.MPPROJ)  !=  0
      )
    Erreur SQL obtenue :
    [Microsoft][ODBC SQL Server Driver][SQL Server]Column PERSONNE.DANAIS' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.8120
    Le vrai code SQL devrait, je pense, être :
    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
    SELECT
      case 
    when (datepart(day, PERSONNE.DANAIS)>datepart(day,getdate()) and datepart(month, PERSONNE.DANAIS)=datepart(month,getdate())) or (datepart(month, PERSONNE.DANAIS)>datepart(month,getdate()))  then
     datediff(year, PERSONNE.DANAIS,getdate()) -1
    else
     datediff(year, PERSONNE.DANAIS,getdate())
    end
    FROM
      PERSONNE
    GROUP BY
      PERSONNE.DANAIS
    HAVING
      ( 
      sum(PERSONNE.MPPROJ)  !=  0
      )
    Test effectué sous BO 5.1.6, le résultat est identique.
    Y a t-il un moyen de faire en sorte que BO génère un code correct ?

  2. #2
    Membre averti

    Inscrit en
    Juillet 2007
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 391
    Points : 443
    Points
    443
    Par défaut
    BO ne sait pas gérer les having, trop compliqué pour lui

    Par contre, ce que tu peux faire :

    - ramener tous les résultats dans ta requête sans cette condition
    - filtrer directement dans le rapport BO soit au niveau du tableau, soit au niveau de l'onglet sur ta variable.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je ne connais pas bien BO 5.1.8, mais en BO XI R2 j'ai pu créer un having avec un objet personnel dans lequel j'ai mis "Somme(Mon montant)". Puis j'ai utilisé cet objet comme filtre.

    Si les objets personnels existent en BO 5.1.8 alors tu peux utiliser ce que je te dis.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2014, 12h23
  2. Réponses: 0
    Dernier message: 13/11/2012, 18h54
  3. [MySQL] Mise à jour avec une condition sur une vue
    Par thor76160 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/03/2009, 01h00
  4. [XSLT]Trouver un noeud avec une condition sur ses sous-noeuds
    Par enguerran dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/02/2007, 11h00
  5. Requete avec une condition sur le resultat [10g]
    Par hotkebab99 dans le forum Oracle
    Réponses: 5
    Dernier message: 12/09/2006, 11h33

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