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 :

probleme avec HAVING


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut probleme avec HAVING
    Bonjour,
    Voila mon soucis vient de la syntaxe "HAVING" hors je pense mettre les bons termes , mais j'ai un message d'erreur à chaques fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 156, Niveau 15, État 1, Ligne 82
    Syntaxe incorrecte vers le mot clé 'having'.
    Pouvez vous me dire ou est le probleme voici le code :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    select
    t.SousFamille,
    t.CAHT,
    t.Taux_TVA,
    from (
    	select
    		case 
    		when t1.No_ between 061010 and 061010013 then ‘UNITE1’
    		when t1.No_ between 061020 and 061020019 then ‘UNITE2’
    		when t1.No_ between 061040 and 061040016 or t1.No_ = 069990001 then ‘UNITE3’
    		when t1.No_ between 071000 and 071000092 or t1.No_ = 051040001 then ‘UNITE4’
    		when t1.No_ between 071010 and 071010087 then ‘UNITE5’
    		when t1.No_ between 081000 and 081000011 then ‘UNITE6’
    		when t1.No_ between 091000 and 091000018 or t1.No_ = 069990000 then ‘UNITE7’
    		when t1.No_ = 101000000 then ‘UNITE8’
    		end as SousFamille,
    	cast((t1.[Amount]) as float) as CAHT,
    	cast(t1.[VAT %] as float) as Taux_TVA,
     
    	from dbo.[SOCIETE$Sales Invoice Line] as t1
    		inner join dbo.SOCIETE$Job as t2
    		on t1.[Job No_] = t2.[No_]
    	where t1.[Job No_] like '%AF.%'
    	and t1.[Amount] <> '0'
    	and t1.[Posting Date] between '01/01/2010' and '31/01/2010' 
     
    union all	
     
    select 
    case 
    when t1.No_ between 061010 and 061010013 then ‘UNITE1’
    when t1.No_ between 061020 and 061020019 then ‘UNITE2’
    when t1.No_ between 061040 and 061040016 or t1.No_ = 069991 then ‘UNITE3’
    when t1.No_ between 071000 and 071000092 or t1.No_ = 051041 then ‘UNITE4’
    when t1.No_ between 071010 and 071010087 then ‘UNITE5’
    when t1.No_ between 081000 and 081000011 then ‘UNITE6’
    when t1.No_ between 091000 and 091000018 or t1.No_ = 069990 then ‘UNITE7’
    when t1.No_ = 101000000 then ‘UNITE8’
    end as SousFamille,
    cast(t1.Amount as float)*-1 as CAHT, 
    cast(t1.[VAT %] as float) as Taux_TVA,
    from dbo.[SOCIETE$Sales Cr_Memo Line] as t1
    	inner join dbo.SOCIETE$Job as t2
    	on t1.[Job No_] = t2.[No_]
    where t1.[Gen_ Prod_ Posting Group]='unites'
    and t1.[Posting Date] between '01/01/2010' and '31/01/2010'
    )t
    order by Taux_TVA,Type_etude,SousFamille
    having (t.SousFamille is not null)
    merci de votre aide

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Bonjour,

    Le "HAVING" permet de filtrer des groupes.
    Or vous n'avez pas de clause "GROUP BY" définie dans votre requète.
    De plus, celui-ci se place avant la clause "ORDER BY".

    Bonne journée

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    merci Ptit_Dje
    effectivement je n'ai pas de clause "GROUP by" car j'ai besoin d'avoir le detail , comment puis je resoudre mon probleme car je voudrais ne pas afficher les lignes "NULL"

  4. #4
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Traitez cela dans la clause WHERE.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    J'ai modifié mon code avec a la place de "HAVING" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    and t1.No_ not between 061000 and 061000004
    and t1.No_ not between 061030 and 061030010
    Mais il affiche ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*245, Niveau*16, État*1, Ligne*7
    Échec de la conversion de la valeur varchar «*SOUSTOTAL*» en type de données int.
    est ce que c'est à cause de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    case 
    		when t1.No_ BETWEEN 061010 AND 061010013 then ‘UNITE1’
    		when t1.No_ BETWEEN 061020 AND 061020019 then ‘UNITE2’
    		when t1.No_ BETWEEN 061040 AND 061040016 OR t1.No_ = 069990001 then ‘UNITE3’
    		when t1.No_ BETWEEN 071000 AND 071000092 OR t1.No_ = 051040001 then ‘UNITE4’
    		when t1.No_ BETWEEN 071010 AND 071010087 then ‘UNITE5’
    		when t1.No_ BETWEEN 081000 AND 081000011 then ‘UNITE6’
    		when t1.No_ BETWEEN 091000 AND 091000018 OR t1.No_ = 069990000 then ‘UNITE7’
    		when t1.No_ = 101000000 then ‘UNITE8’
    		end AS SousFamille,
    Merci encore Ptit_Dje

  6. #6
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Difficile à dire... Parmi vos données qui retournent des valeurs entières ou celles qui sont castées en entier, la valeur *SOUSTOTAL* apparait.
    C'est ce que vous dit le message d'erreur.
    Vérifiez ou cela se produit.
    Sans la définition de vos tables, on ne peut savoir quel est le type de données présentes dans celles-ci.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    les champs selectionés sont :
    No_ = varchar(20)
    Amount = decimal(38,20)
    VAT% = decimal(38,20)

    chose curieuse meme si je mets :
    Dans les résultats j'ai les champs NULL qui s'affichent

    je n'arrive pas a savoir pourquoi !

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    Bon j'ai resolu mon probleme avec une table virtuelle , j'ai le resultat voulu
    merci encore pour votre aide

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

Discussions similaires

  1. probleme avec une requete de group by avec having
    Par boumacmilan dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/04/2012, 15h00
  2. Débutant Sql - Probleme avec Having
    Par sebys dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2008, 09h28
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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