SQL Fonction agregat Group by [Résolu]

Labon90 17 Messages postés mardi 12 juillet 2011Date d'inscription 16 septembre 2011 Dernière intervention - 23 août 2011 à 13:37 - Dernière réponse : LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention
- 26 août 2011 à 00:18
Bonjour à tous,

J'ai une base de donnees avec un champ numero de projet, le nom du projet, le nbr heures des divisions du projet et un champ avec le nbr Heures des Mise en production du Projet.

il y a plusieurs divisions et mise en production pour un meme projet...
Je voudrait avec une requete avoir la SUM des heures des divisions, des Mise en production avec le No et le Nom du projet....


J'ai fait ceci:

Select ProjNo, ProjNom, SUM(NbrHeures) From Production Where NbrHeures > 0 Group BY ProjNom

Il me demande une fonction d'agregat pour le Nom du projet mais je ne trouve pas comment... J'ai essayé first mais ca l'air que c'est juste dans Access...

Il me faut absolument le nom Associé au projet!

Quelqu'un aurait une idée s.v.p?

Merci!
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 24 août 2011 à 02:10
3
Merci
SELECT Production.ProjNo, Production.ProjNom, Sum([Production]![NbreHeures]) AS Expr1
FROM Production
GROUP BY Production.ProjNo, Production.ProjNom
HAVING (((Sum([Production]![NbreHeures]))>0));

fonctionne à merveille...!


[] Ce qui va sans dire. va mieux en le disant.

Merci LIBRE_MAX 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de LIBRE_MAX
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 23 août 2011 à 16:51
0
Merci
Salut

"Il me demande" qui ça ?
Dans quel logiciel es-tu ? VB.Net, vraiment ?
Essaye la syntaxe Having à la place de Where

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Labon90 17 Messages postés mardi 12 juillet 2011Date d'inscription 16 septembre 2011 Dernière intervention - 23 août 2011 à 16:56
0
Merci
Désolé.... lol vb 2010, je croyait que l'entête suffisait...

VB.NET et VB 2005 > Base de données > SQL Server > SQL Fonction agregat Group by

J'ai fait un Select all * et j'ai tout géré à la main dans une boucle....
J'avais déjà essayé having...

Pour le Prochain je vais p-e essayé de concatener ProjNo + ProjNom...


Merci!
Commenter la réponse de Labon90
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 23 août 2011 à 17:52
0
Merci
Ok, la boucle semble la meilleure tactique car, de toute façon, il t'aurait fallu parcourir le RecordSet pour récupérer la ligne fournissant les sommes.

Oui, .Net, mais comme ta question ne portais que sur de la syntaxe SQL, j'ai pensé que tu étais dans l'interface de Management Studio de SQL Server.
Donc, ce que je pense mais à confirmer, c'est qu'on ne peut pas faire de Group By lorsque le résultat est destiné à un RecordSet (supposition de l'objet car non précisé); je vois mal comment serait structuré le RecordSet.
Pense à détailler ton environnement dans tes prochaines questions, c'est important.
Commenter la réponse de cs_Jack
Labon90 17 Messages postés mardi 12 juillet 2011Date d'inscription 16 septembre 2011 Dernière intervention - 23 août 2011 à 18:39
0
Merci
D'accord, je le ferai...

L'objet était un sqlReader et ça marchait bien avec juste le ProjetNo (Sans le ProjetNom)

sqlReader.getString(0)
sqlReader.getDouble(1)
sqlReader.getDouble(2)... etc

Merci de ton aide!!!
Commenter la réponse de Labon90
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 24 août 2011 à 01:41
0
Merci
Salut,

Ajoutes ProjeNo à l' opération d' agrégat ...

Select ProjNo, ProjNom, SUM(NbrHeures) From Production Where SUM(Production.NbrHeures) > 0 Group BY ProjNo, ProjNom

Question:
Pourquoi exclure NbHeures=0 alors que ça n' a pas d' incidence sur la somme ?
C' est plutôt tous les ptrojets dont la SUM(NbrHeures)=0 que tu devras exclure ..., non ?
Enfin je cois...

[] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX
Labon90 17 Messages postés mardi 12 juillet 2011Date d'inscription 16 septembre 2011 Dernière intervention - 25 août 2011 à 14:17
0
Merci
Merci beaucoup! et pour répondre à ta question c'est qu'il y a des heures prévues et des heures réelles calculée avant et des fois ca donne de négatifs (-3.45)...... D'où le >0


Merci encore...
Commenter la réponse de Labon90
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 25 août 2011 à 18:27
0
Merci
Dans ce cas, tu peux toujours, au sein même de la requete, remplacer toutes les lignes ou [Production]![NbrHeures]<0 par 0 .

Remplaces donc
Sum([Production]![NbreHeures])
PAR
Sum(IIF([Production]![NbrHeures]<0;0;[Production]![NbrHeures]))

[] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX
Labon90 17 Messages postés mardi 12 juillet 2011Date d'inscription 16 septembre 2011 Dernière intervention - 25 août 2011 à 18:36
0
Merci
Oui, dans l'étape précedente j'ai fait un Case ... When < 0 then 0 else .... End as PRNbrHeures...

Mais j'ai essayé ton : GROUP BY Production.ProjNo, Production.ProjNom et l'erreur suivant sort...

The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

Ca marche très bien quand je met seulement le PRProjNo

Voici ma requete:

SQLStr = "SELECT PRProjNo, PRProjNom, SUM(PRTonnage) as PRTonnage, SUM(PRNbrHeures) as PRNbrHeures From ProdRestante " _
& " Group BY PRProjNo, PRProjNom HAVING SUM(PRTonnage) > 0 or SUM(PRNbrHeures) > 0 order by PRProjNo"
Commenter la réponse de Labon90
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 26 août 2011 à 00:18
0
Merci
L' expression me semble correcte..
Toutefois, il se peut que lors du regroupement,
il y' aurait une translation de type.

Fais donc une recherche sur CONVERT() .

A+



[] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.