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

Développement SQL Server Discussion :

champ calculé & case


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut champ calculé & case
    Bonjour,

    Je m'excuse d'avance car je suis certain que ce sujet a déjà été traiter mais j'ignore sur quel mot clé le rechercher...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select a, b, c, d, e, (select (sum(f)) from maTable where g = 'machin') as x
    from maTable
    group by a, b, c, d, e
    order by a, b, c, d, e
    Voilà une jolie requête (j'ai essayé de résumé celle que j'suis en train de construire).

    Jusque là, ça fonctionne nickel. Cela se corse quand je veux ajouter un case sur le champ calculé x.

    J'avais écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select a, b, c, d, e, (select (sum(f)) from maTable where g = 'machin') as x,
             (case
                    when x<=1500 then (h*25)/100
                    when x>1500 and x<=2500 then (h*15)/100
              end) as test
    from maTable
    group by a, b, c, d, e
    order by a, b, c, d, e
    Et là ça plante. Je reçois comme erreur que la colonne x est inconnu. Enfin plus précisé que x n'est pas un nom de colonne valide.

    Comment pourrais-je faire pour utiliser ce champ x dans mon case ?

    Merci d'avance.

    Griftou.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Je pense que vous pouvez écrire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT a,
    		b,
    		c,
    		d,
    		e,
    		CASE
    			WHEN SUM(f) <= 1500 THEN h * 0.25
    			WHEN SUM(f) > 1500 AND SUM(f) <= 2500 THEN h * 0.15
    		END AS x
    FROM dbo.maTable
    WHERE g = 'machin'
    GROUP BY a, b, c, d, e, h
    @++

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Merci pour ta réponse mais malheureusement, on est venu me compliquer encore un peu la tache par après en ajoutant de nouveaux paramètres à ce qui m'avait été demandé.

    Juste pour info, voilà ce qu'est devenu ma requête :

    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
     
    select	carteclient, date, time, siege, caisse, ticket, sum(canet) as canet, sum(paye) as 'payé',A, B, sum(escp) as escp,
    		(case 
    			when (A between 1501 and 2500) and (B between 0 and 1500) then sum(((ca-rab+escp)*25)/100)
    			when (A > 2500) and (B between 0 and 1500) then sum(((ca-rab+escp)*25)/100)
    			when (A > 2500) and (B between 1501 and 2500) then case when (B - sum(paye))<=1500 then sum(((ca-rab+escp)*25)/100) else sum(((ca-rab+escp)*15)/100) end
    			when B > 2500 then case when (B - sum(paye))<=2500 then sum(((ca-rab+escp)*15)/100) else sum(((ca-rab+escp)*10)/100) end			
    		end) as escpN
    from	(select		c.date, c.siege, c.caisse, c.ticket, c.time, c.carteclient, c.escp, c.ca, c.rab, sum(c.ca-c.rab+c.escp) as 'caNET', sum(c.ca-c.rab) as 'paye',
    					(select sum(ca-rab+escp) from tickets.dbo.tb2009 where carteclient = c.carteclient and ((date < c.date) or (date = c.date and time <= c.time))) as A,
    					(select sum(ca-rab) from tickets.dbo.tb2009 where carteclient = c.carteclient and ((date < c.date) or (date = c.date and time <= c.time))) as B
    		from		tickets.dbo.tb2009 as c
    		where		carteclient like '8811%'
    		group by	carteclient, date, time, siege, caisse, ticket, escp, ca, rab) as matable
    group by A, B, carteclient, date, time, siege, caisse, ticket
    order by carteclient, date, time, siege, caisse, ticket
    Je crois que j'avais rien écrit d'aussi poussé en sql...
    Je suis assez fier de constaté que cela fonctionne sans erreur.

    Merci quand même.

    Griftou.

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

Discussions similaires

  1. [MIGRATION] champ de type "case à cocher"
    Par The_Nail dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 10/05/2011, 11h07
  2. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04
  3. Réponses: 2
    Dernier message: 22/03/2004, 10h50
  4. champ calculé
    Par tomm dans le forum Bases de données
    Réponses: 22
    Dernier message: 25/02/2004, 00h31
  5. [TQuery] champs calculés
    Par Amenofis dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/01/2004, 14h46

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