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

MS SQL Server Discussion :

Problème SELECT, CASE et Group by


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut Problème SELECT, CASE et Group by
    Bonjour à tous,

    Voilà, j'utilise le branchement CASE dans un select de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT matable.champ1, 
    champ2 = case when champ3 > 5 
    then 0
    else 1
    end
    from matable
    group by champ1, champ2
    C'est là que ca pose problème, visiblement, il ne reconnait pas champ2 comme une colonne....

    Que dois-je faire ???

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT matable.champ1, 
    case when champ3 > 5 
    then 0 
    else 1 
    end  AS CHAMP2
    from matable 
    group by champ1, champ2

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    Désolé mais ca marche pas... j'avais déjà essayé à vrai dire...et j'ai réessayer mais ca marche toujours pas...

  4. #4
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 74
    Points
    74
    Par défaut
    ca semble correct pourtant
    quel est le message d'erreur ?

    A+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    Voilà ce que je tappe exactement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select case
    	when prod.id > 5 then 1
    	else 0
           end as champ1
     
    from prod
     
    group by champ1
    et voila le message:
    Invalid column name 'champ1'.
    Je ne comprends pas...

  6. #6
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    C'est le group by qui ne reconnais pas champ1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select case 
       when prod.id > 5 then 1 
       else 0 
           end as champ1 
    from prod 
    group by case when prod.id > 5 then 1 else 0 end
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    On dirait que ca fonctionne...

    Un tout grand merci !!!!!!!!!!

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut SQL: Case dans Group By
    Bonjour,

    Je ré-ouvre ce sujet puisque qu'il correspond parfaitement à mon soucis.
    J'ai testé votre astuce du CASE dans le group by (je n'y avait même pas pensé.. )
    Mais malheureusement il ne veut pas reconnaître mes champs...

    Msg 8120, Level 16, State 1, Procedure DALCommandeFournisseurSQL, Line 205
    Column 'dbo.DALCommandeFournisseur2.INVOICEDATE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

    Une idée?





    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Select
     
    CASE 
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv='1900-01-01' then 'Date Demandée'
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv!='1900-01-01' then 'Date Confirmée'
        WHEN INVOICEDATE !='1900-01-01' then 'Date Facture'
        ELSE 'Date de Livraison'
        END AS LeTypeDate,
        CASE 
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv='1900-01-01' then DELIVERYDATE2
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv!='1900-01-01' then ConfirmedDlv
        WHEN INVOICEDATE !='1900-01-01' then INVOICEDATE
        ELSE deliverydate 
        END AS Ladate
     
     
     
     
    FROM [dbo].[DALCommandeFournisseur2] Prevu
    where PurchStatus=2 OR PurchStatus=3
    Group by 
     
        --ConfirmedDlv,
        /*INVOICEDATE,
        DELIVERYDATE2,
        DELIVERYDATE,            
        CONFIRMEDDLV,*/
        CASE 
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv='1900-01-01' then DELIVERYDATE2
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv!='1900-01-01' then ConfirmedDlv
        WHEN INVOICEDATE !='1900-01-01' then INVOICEDATE
        ELSE deliverydate 
        END

    Merci.

    Cordialement,

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    vous devez grouper également sur le résultat de votre premier case !

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    SELECT
     
    CASE 
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv='1900-01-01' then 'Date Demandée'
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv!='1900-01-01' then 'Date Confirmée'
        WHEN INVOICEDATE !='1900-01-01' then 'Date Facture'
        ELSE 'Date de Livraison'
        END AS LeTypeDate,
        CASE 
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv='1900-01-01' then DELIVERYDATE2
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv!='1900-01-01' then ConfirmedDlv
        WHEN INVOICEDATE !='1900-01-01' then INVOICEDATE
        ELSE deliverydate 
        END AS Ladate
     
    FROM [dbo].[DALCommandeFournisseur2] Prevu
    WHERE PurchStatus=2 OR PurchStatus=3
    GROUP BY 
     
        --ConfirmedDlv,
        /*INVOICEDATE,
        DELIVERYDATE2,
        DELIVERYDATE,            
        CONFIRMEDDLV,*/
     CASE 
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv='1900-01-01' then 'Date Demandée'
        WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv!='1900-01-01' then 'Date Confirmée'
        WHEN INVOICEDATE !='1900-01-01' then 'Date Facture'
        ELSE 'Date de Livraison'
        END ,   
      CASE 
    		WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv='1900-01-01' then DELIVERYDATE2
    		WHEN DELIVERYDATE ='1900-01-01' AND ConfirmedDlv!='1900-01-01' then ConfirmedDlv
    		WHEN INVOICEDATE !='1900-01-01' then INVOICEDATE
    		ELSE deliverydate 
        END

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci cela marche !!!

    Bonne journée

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

Discussions similaires

  1. Problème Select case ne prend pas en compte les données
    Par gogo850 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/06/2012, 10h42
  2. [XL-2003] Problème Select Case multiples
    Par Estimea dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2011, 10h29
  3. Problème avec case et group by
    Par queryz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/07/2010, 16h40
  4. [VBA-E] Problème Select case
    Par jamelie dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 12/04/2007, 12h21
  5. [VB .NET] problème Select Case
    Par KrusK dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/01/2007, 10h59

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