Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2011, 23h45   #1
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
Par défaut requete sql

bonjour ,
je suis bloqué sur une requete sql

voila ma requete
Code sql :
1
2
3
4
5
6
 
SELECT dbo.etat_engagement.montant_engager,
SUM(dbo.modification_engager.montant) AS som_modification, dbo.etat_engagement.n_nature_engagement
FROM  dbo.etat_engagement LEFT OUTER JOIN dbo.modification_engager ON dbo.etat_engagement.id2 = dbo.modification_engager.id2
WHERE   (dbo.etat_engagement.id1 = 2)
GROUP BY dbo.etat_engagement.montant_engager, dbo.etat_engagement.n_nature_engagement

bon la requete marche bien , mais j'aimerai appliqué un critère where applicable uniquement sur le champs sum(dbo.modification_engager.montant)
mais je sais pas comment faire
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 01h10   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Faites une recherche du côté de la clause HAVING.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 07h54   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
SELECT dbo.etat_engagement.montant_engager,
SUM(dbo.modification_engager.montant) AS som_modification, dbo.etat_engagement.n_nature_engagement
FROM dbo.etat_engagement LEFT OUTER JOIN dbo.modification_engager ON dbo.etat_engagement.id2 = dbo.modification_engager.id2
WHERE (dbo.etat_engagement.id1 = 2)
GROUP BY dbo.etat_engagement.montant_engager, dbo.etat_engagement.n_nature_engagement
Clause HAVING...

ou aussi:

Code :
1
2
3
4
5
6
7
8
 
SEELCT * FROM
(SELECT dbo.etat_engagement.montant_engager,
SUM(dbo.modification_engager.montant) AS som_modification, dbo.etat_engagement.n_nature_engagement
FROM  dbo.etat_engagement LEFT OUTER JOIN dbo.modification_engager ON dbo.etat_engagement.id2 = dbo.modification_engager.id2
WHERE   (dbo.etat_engagement.id1 = 2)
GROUP BY dbo.etat_engagement.montant_engager, dbo.etat_engagement.n_nature_engagement) AS T
WHERE som_modification>2
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 12h22   #4
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
Citation:
Envoyé par Waldar Voir le message
Faites une recherche du côté de la clause HAVING.
merci pour votre réponse mais j'ai pas trop compris si tu peut m'aidé ca sera sympa
donc ce que j'ai compris marche pas
Code sql :
1
2
3
4
5
6
7
SELECT dbo.etat_engagement.montant_engager, SUM(dbo.modification_engager.montant) AS som_modification HAVING (dbo.modification_engager.n_certification not like '') , 
dbo.etat_engagement.n_nature_engagement
FROM dbo.etat_engagement LEFT OUTER JOIN
dbo.modification_engager ON dbo.etat_engagement.id2 = dbo.modification_engager.id2
WHERE (dbo.etat_engagement.id1 = 2)
GROUP BY dbo.etat_engagement.montant_engager, dbo.etat_engagement.n_nature_engagement

si vous comprenez bien je veut que la sum(dbo.modification_engager.montant) relatif pour chaque ligne renvoie que la sum des montant dont n_certification pas vide
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 12h46   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Code :
1
2
3
4
5
6
 
SELECT dbo.etat_engagement.montant_engager,
SUM(CASE WHEN ISNULL(dbo.modification_engager.n_certification,'')='' THEN 0 ELSE ISNULL(dbo.modification_engager.montant,0) END ) AS som_modification, dbo.etat_engagement.n_nature_engagement
FROM dbo.etat_engagement LEFT OUTER JOIN dbo.modification_engager ON dbo.etat_engagement.id2 = dbo.modification_engager.id2
WHERE (dbo.etat_engagement.id1 = 2)
GROUP BY dbo.etat_engagement.montant_engager, dbo.etat_engagement.n_nature_engagement
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 14h24   #6
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
Désolé de te déranger, mais ça renvoie une erreur pour la partie :
Code sql :
1
2
SUM(CASE WHEN ISNULL(dbo.modification_engager.n_certification, '') 
               = '' THEN 0 ELSE ISNULL(dbo.modification_engager.montant, 0) END) AS Expr1
Citation:
les types de données de type text et varchar sont incompatibles dans l'opérateur equal to
En plus je ne suis pas certain si cette ligne renvoie la somme des montants dont n_certification est différent de null puisque je ne vois pas IS NOT NULL.

PS : la colonne n_certification de type varchar.
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 14h29   #7
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
dbo.modification_engager.montant est de quel type?
n_certification est en VARCHAR(max)?


Citation:
+ je suis pas certain si cette ligne renvoie la somme des montant dont n_certification différent de null puisque je voit pas ISNOTTNULL
Si je simule ca pas ISNULL(colonne,'')='' qui gère à la fois le cas du NULL est de la chaine vide ''...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 16h27   #8
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
dbo.modification_engager.montant type float
n_certification est en VARCHAR(max)
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 16h32   #9
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
dbo.modification_engager.montant type float
n_certification est en VARCHAR(max)

Etes vous sûr que l'erreur intervient ici?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 16h50   #10
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
oui puisque n_certification la seul selectionne dans ma requete de type varchar
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 17h28   #11
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Bizarre
essayez cela?

Code :
1
2
SUM(CASE WHEN DATALENGTH(dbo.modification_engager.n_certification)=0 
               THEN 0 ELSE ISNULL(dbo.modification_engager.montant, 0) END) AS Expr1
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 17h36   #12
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
merci pour votre aide
je vais testé cela le soir
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 19h21   #13
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
hum le resultat de la somme inclut aussi les montant dont n_certification = NULL
faux que la case soit vide pour pour qu'il marche mais par default sqlserver mis NULL si vide
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 19h29   #14
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
c'est bon
j'ai utilisé COALESCE

Code sql :
1
2
SUM(CASE WHEN DATALENGTH (COALESCE(dbo.modification_engager.n_certification,''))=0 
               THEN 0 ELSE ISNULL(dbo.modification_engager.montant, 0) END) AS Expr1


un gros merci a toi iberserk
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 23h02   #15
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
si tu peut bien m'expliquer le code stp
parceque la le problème resolu , mais j'ai pas assez comprendre

j'ai compris que la premiere partie

select la somme ( des montant engager dans le cas ou n_certification est vide)
mais ca sert a qoui
THEN 0 ELSE ISNULL(dbo.modification_engager.montant, 0) END)

Code sql :
1
2
3
4
5
 
 
 
SUM(CASE WHEN DATALENGTH (dbo.modification_engager.n_certification))=0 
               THEN 0 ELSE ISNULL(dbo.modification_engager.montant, 0) END) AS Expr1
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 09h51   #16
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
En francais pour chaque ligne:

"Ajoute le montant si n_certification n'est pas vide,sinon ajoute 0..."
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h24.


 
 
 
 
Partenaires

Hébergement Web