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

SQL Oracle Discussion :

Case When paramétrable et imbriqué


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut Case When paramétrable et imbriqué
    Hello,

    J'ai un petit souci, voici ma query :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT 
    to_char(RUN_DATE,'dd') as "DAY",
    SUM(CASE WHEN (to_char(RUN_DATE,'mm')=to_char(add_months(sysdate,-3),'mm')) THEN GEN_COUNT_CUSTOMER END) AS "GEN_COUNT_CUSTOMER_M-3",
    SUM(CASE WHEN (to_char(RUN_DATE,'mm')=to_char(add_months(sysdate,-2),'mm')) THEN GEN_COUNT_CUSTOMER END) AS "GEN_COUNT_CUSTOMER_M-2",
    SUM(CASE WHEN (to_char(RUN_DATE,'mm')=to_char(add_months(sysdate,-1),'mm')) THEN GEN_COUNT_CUSTOMER END) AS "GEN_COUNT_CUSTOMER_M-1",
    SUM(CASE WHEN (to_char(RUN_DATE,'mm')=to_char(add_months(sysdate,0),'mm')) THEN GEN_COUNT_CUSTOMER END) AS "GEN_COUNT_CUSTOMER_M"
    FROM RAS_DD_SEGMENTATION_MATRICE
    WHERE SEG=:SEG
    and
    RUN_DATE>=add_months(sysdate,-3)
    GROUP BY to_char(RUN_DATE,'dd')
    ORDER BY to_char(RUN_DATE,'dd')
    J'ai un premier paramètre SEG mais il faudrait que je rajoute un CASE WHEN sur la variable pour que l'utilisateur final puisse choisir (ici GEN_COUNT_CUSTOMER). J'ai essayé avec un AND :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(CASE WHEN (:FIELD='GEN_COUNT_CUSTOMER' AND to_char(RUN_DATE,'mm')=to_char(add_months(sysdate,0),'mm')) THEN GEN_COUNT_CUSTOMER END) AS "GEN_COUNT_CUSTOMER_M"
    Mais il ne me sort aucun résultat ni erreur...
    Quelqu'un aurait une idée...? Merci pour votre aide...

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Ta syntaxe me semble bonne. Qu'as-tu dans :FIELD ?

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    s'il n'y a pas de résultat c'est qu'aucune ligne ne répond à la restriction de la clause WHERE

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Est-ce que vous voulez simuler un sql dynamique où la colonne utilisée pour faire la somme est choisi en fonction d'un paramètre fourni dans l'interface utilisateur ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut
    oui mnitu c'est exactement ça...
    plaineR, le paramètre :FIELD contient le nom du champ sélectionné par l'utilisateur pour faire la somme sur ce champ

  6. #6
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    Pour les champs nulls ça risque d'être dur sans IS NULL. La seule solution est que tu utilises l'écriture suivante (sachant que 'x' ne peut pas exister dans :FIELD ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SUM(
       CASE WHEN (nvl(:FIELD,'x')='GEN_COUNT_CUSTOMER'
          AND to_char(RUN_DATE,'mm')=to_char(add_months(sysdate,0),'mm')) 
       THEN GEN_COUNT_CUSTOMER END
    ) AS "GEN_COUNT_CUSTOMER_M"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/10/2005, 13h25
  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