SQL Fonction agregat Group by

Résolu
Labon90 Messages postés 17 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 16 septembre 2011 - 23 août 2011 à 13:37
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 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!
A voir également:

10 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
24 août 2011 à 02:10
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.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2011 à 16:51
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)
0
Labon90 Messages postés 17 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 16 septembre 2011
23 août 2011 à 16:56
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!
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2011 à 17:52
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Labon90 Messages postés 17 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 16 septembre 2011
23 août 2011 à 18:39
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!!!
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
24 août 2011 à 01:41
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.
0
Labon90 Messages postés 17 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 16 septembre 2011
25 août 2011 à 14:17
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...
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
25 août 2011 à 18:27
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.
0
Labon90 Messages postés 17 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 16 septembre 2011
25 août 2011 à 18:36
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"
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
26 août 2011 à 00:18
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.
0
Rejoignez-nous