begin process at 2012 05 27 04:33:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Requêtes

 > 

Reqûete SQL qui fit de la résistance


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Reqûete SQL qui fit de la résistance

mardi 24 mars 2009 à 12:02:21 | Reqûete SQL qui fit de la résistance

jul21

Bonjour à tous !!

J'ai une requête qui me fait de la résistance, la voici :

Insert Into TOTO (DateHeure,Vmoyenne,NomMachine,Periode)
Select Current_Timestamp , Avg(TagValue), StationName,Cast('h' as char)
From TEtatMachine20i
Where TagName='VMOYENNE' and cast(TagTimeStamp as DateTime)<=Current_Timestamp
and Cast(TagTimeStamp as DateTime)>=Cast(DateAdd(hour,-1,Current_Timestamp) as DateTime)

l'erreur est la suivante :

Msg 8120, Niveau 16, État 1, Ligne 25
La colonne 'TEtatMachine20i.StationName' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.

mardi 24 mars 2009 à 14:42:28 | Re : Reqûete SQL qui fit de la résistance

aieeeuuuuu

Réponse acceptée !
bonjour,

si tu utilise des fonctions d'agregat (moyenne en l'occurence), tu dois utiliser la clause GROUP BY pour indiquer sur quoi grouper

la apparement tu veux calculer la moyenne pour une machine et une periode données

essaie :

Insert Into TOTO (DateHeure,Vmoyenne,NomMachine,Periode)
Select Current_Timestamp , Avg(TagValue), StationName,Cast('h' as char)
From TEtatMachine20i
Where TagName='VMOYENNE' and cast(TagTimeStamp as DateTime)<=Current_Timestamp
and Cast(TagTimeStamp as DateTime)>=Cast(DateAdd(hour,-1,Current_Timestamp) as DateTime)
GROUP BY StationName,Cast('h' as char)
mardi 24 mars 2009 à 14:51:39 | Re : Reqûete SQL qui fit de la résistance

jul21

Salut,

Merci pour ta réponse, j'ai fait le test et ça marche mais sans le Cast('h' as char) à la fin.

La requête devient donc :

Insert Into TOTO (DateHeure,Vmoyenne,NomMachine,Periode)
Select Current_Timestamp , Avg(TagValue), StationName,Cast('h' as char)
From TEtatMachine20i
Where TagName='VMOYENNE' and cast(TagTimeStamp as DateTime)<=Current_Timestamp
and Cast(TagTimeStamp as DateTime)>=Cast(DateAdd(hour,-1,Current_Timestamp) as DateTime)
GROUP BY StationName

Si je laisse le Cast('h' as char) j'ai le message d'erreur suivant:
Msg 164, Niveau 15, État 1, Ligne 23
Chaque expression GROUP BY doit contenir au moins une colonne qui n'est pas une référence externe.


Je ne comprends pas tous, y compris le raison pour laquelle en mettant à la fin le GROUP BY StationName...cela fonctionne; Si tu pouvais me donner des explications supplémentaires je suis preneur.

Merci encore.

mardi 24 mars 2009 à 16:12:09 | Re : Reqûete SQL qui fit de la résistance

aieeeuuuuu

Réponse acceptée !
Arfff,
oui je suis allé un peu vite sur le group by, j'avais pas vu que le cast ne faisait pas référence a une colonne...

en fait tu lui demande de calculer une moyenne. il faut donc lui préciser sur quelle colonne tu regroupe pour faire ta moyenne. En gros, de plusieurs resultats (ici plusieurs machine du meme nom), il va retourner une seule ligne. la clause GROUP BY permet de préciser que tu regroupe toutes les machine du meme nom, et que tu fais la moyenne de la valeur TagValue, machine par machine....

quand tu utilise des fonctions d'agregat (somme, moyenne, max, min, ...) qui effectue un calcul sur plusieurs données, il faut bien que tu ait plusieurs données... :) la clause GROUP BY est donc obligatoire pout tous les champs spécifiés dans la clause SELECT, et pour lesquels tu n'utilise pas de fonction d'agregat

je ne sais pas si j'ai été clair.
mercredi 25 mars 2009 à 14:32:31 | Re : Reqûete SQL qui fit de la résistance

jul21

Salut,

C'est ok, c'est clair.

Merci.


Cette discussion est classée dans : sql, datetime, cast, résistance, reqûete


Répondre à ce message

Sujets en rapport avec ce message

DATETIME SQL SERVER AU SECOURS !!!!!! [ par MACHOMAN ] bonjour, j'ai plusieurs pb avec les datetime sous sql server : 1 - j'ai deux champs datetime, dans le premier il y a une date dans le second une heure test si string (datetime) est correct. [ par tmcuh ] Voilà un big soucis avec SQL. Je récupère une donnée de type char[10] provenant d'une table (qui ne m'appartient pas) et je dois tester à l'interrieur sql server 2000 + probleme de datetime ! [ par jimmy69 ] Bonjour,Dans une db sous sql server 2000 on a une table qui utilise une colonne de type datetime.J'aimerais savoir quelle est la query SQL à utiliser VB.net 2005 et SQL 2005 Express : Prbl DateTime [ par morleys ] Bonjour à vous tous,Je coince voilà quelque temps sur un probleme d'enregistrement de date SQL 2005.Si j'ai toto = Cdate(Now())        Pour info toto problème concaténation [ par chamallow ] Bonjour,J'ai un petit problème avec une concaténation. C'est tout bête mais bon.SELECT CAST("1/1/" + CAST(annee AS CHAR(4)) AS DATETIME)from maTableSq [SQL] date - n heures [ par remifalcon ] Bonjour, après avoir chercher différents tuto, je viens vers vous pour ce problème:Je cherche à faire une requète SQL me renvoyant toutes les lignes ( sql server datetime [ par brmdevinci ] svp j'execute cette requete " select * from personne where date_nais='12/02/1986'" la resultat est un tableau vide sachant que quand j'ai remplit la problème avec le type datetime de sql [ par ruberlio ] Salut, j'utillise  le type datetime de sql et je voudrais savoir comment faire pour ne plus voir  ma date se mélanger avec l'heure par exemple pour le requete SQL avec Sélection sur un champs DateTime dans SQLSERVER 2008 [ par vinok ] Bonjour,Je voudrais faire une selection sur un champs de type DATETIME.je souhaite donc faire la requete suivante: select * from matable where date_ta Format régionnal datetime [ par fabienfs ] Bonjour, Je viens d'installer SQL Server 2005 Standard édition sur mon seveur Windows 2003. Les paramètres régionnaux de Windows sont bien en françai


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales