rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[SQL]Problème de requête insert

Melaus, le mercredi 31 janvier 2007 à 10:50:03
Bonjour à toutes et à tous,

Je vais tenter d'expliquer mon petit problème du mieux possible.

Dans une base de données SQL se trouve 3 tables.
- Table statistique
- Table Host
- Table server

Je dois alimenter la table Statistique en debut de mois avec des infos de la table Host.

Voici un debut de requête
INSERT INTO StatGroup (GroupId, GroupName, NbrSecProd, Mois, Annee, SumDelay, SumIncident, MTBF, MTTF, Dispo)
SELECT  GroupId, GroupName, DATEDIFF(second,SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 6) + '01', SUBSTRING (CONVERT(varchar(8), DATEADD(M, 1, GETDATE()), 112), 1, 6) + '01') AS NbrSecProd, DATEPART(M, GETDATE()) AS Mois, DATEPART (YYYY, GETDATE()) AS Annee, 0 AS SumDelay, 0 AS SumIncident, 0 AS MTBF, 0 AS MTTF, 100 AS Dispo
FROM ServerGroup


Le resultat est :

Id | Host | NbrSecProd | Mois | Annee | SumDelay | SumIncident | MTBF | MTTR | Dispo

1..|.host1|...2678400..|..1...|..2007.|..0.......|......0...­...|..0...|...0..|.100..
2..|.host2|...2678400..|..1...|..2007.|..0.......|......0...­...|..0...|...0..|.100..
3..|.host3|...2678400..|..1...|..2007.|..0.......|......0...­...|..0...|...0..|.100..
4..|.host4|...2678400..|..1...|..2007.|..0.......|......0...­...|..0...|...0..|.100..
5..|.host5|...2678400..|..1...|..2007.|..0.......|......0...­...|..0...|...0..|.100..





La colonne AS NbrSecProd doit être multiplié par le nombre de serveurs faisant parti du Host.
Pour les connaitres, j’utilise cette requête
SELECT     COUNT(*) AS Expr1
FROM Server INNER JOIN ServerGroup ON Server.GroupId = ServerGroup.GroupId
WHERE     (Server.OutProdState = 0)
GROUP BY Server.GroupId

Elle affiche

| Expr 1 |
|...28....|
|...2.....|
|...5.....|
|...6.....|
|...4.....|
|...21...|
|...6.....|
|...9.....|
|...2.....|
|...7.....|
|...28...|
|...13...|
|...16...|
|...31...|
|...13...|

Le soucis est que j’ai un peu de mal à ajouter le multiplicateur à ma requête INSERT.

Une âme charitable pourrait peut-etre m'eclairer ? :)
Configuration: Windows XP
Firefox 1.5.0.7
Répondre à Melaus  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Reivax962, le mercredi 31 janvier 2007 à 12:26:33
Bonjour,

Quel SGBD utilises-tu ?
Si tu es sous SQL Server, tu peux par exemple passer par une fonction :
CREATE  FUNCTION getDureeProd(@groupId int, @nbSec varchar(8))
RETURNS varchar(10)
AS
BEGIN
	DECLARE @nbServers int
	DECLARE @nbSecInt int

	SELECT @nbSecInt = CONVERT(int, @nbSec)
		
	SELECT @nbServers = count(*)
	FROM Server
	INNER JOIN ServerGroup
		ON Server.GroupId = ServerGroup.GroupId
	WHERE     (Server.OutProdState = 0)
	GROUP BY Server.GroupId

	RETURN Convert(varchar(10), @nbServers*@nbSecInt)
END
Je pense que tu peux en comprendre le principe assez simplement.
Ta requête SQL devient alors :
INSERT INTO StatGroup (GroupId, GroupName, NbrSecProd, Mois, Annee, SumDelay, SumIncident, MTBF, MTTF, Dispo)
	SELECT 
		GroupId, GroupName,
		getDureeProd(GroupId,
			DATEDIFF(second,SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 6) + '01', SUBSTRING (CONVERT(varchar(8), DATEADD(M, 1, GETDATE()), 112), 1, 6) + '01'))
		AS NbrSecProd,
		DATEPART(M, GETDATE()) AS Mois, DATEPART (YYYY, GETDATE()) AS Annee, 0 AS SumDelay, 0 AS SumIncident, 0 AS MTBF, 0 AS MTTF, 100 AS Dispo
	FROM ServerGroup
Par contre, si ton SGBD ne supporte pas les fonctions (ou autre choses équivalentes), tu peux tenter une vue, qui te donne d'un côté le groupID, de l'autre le nombre de serveurs, et faire une jointure sur la vue en question...
Répondre à Reivax962

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Melaus, le mercredi 31 janvier 2007 à 14:25:12
Merci bcp pour ton aide Reivax, mais j'ai finis par trouver une solution qui fonctionne.
Je suis sur SQL Server et je n'ai que de vagues notions (les fonctions de bases).
J'ai tenté ta solution mais le resultat de NbrSecProd etait tjs le même pour tous les Host (mêmes ceux n'ayant aucun serveur). Donc je pense que je n'ai pas vraiment tout capté de ta solution. ^^

Au final j'ai reussi à faire ça :
INSERT INTO StatGroup
                      (GroupId, GroupName, NbrSecProd, Mois, Annee, SumDelay, SumIncident, MTBF, MTTF, Dispo)
SELECT     ServerGroup.GroupId, ServerGroup.GroupName, DATEDIFF(second, SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 6) + '01', 
                      SUBSTRING(CONVERT(varchar(8), DATEADD(M, 1, GETDATE()), 112), 1, 6) + '01') * COUNT(Server.GroupId) AS NbrSecProd, DATEPART(M, GETDATE()) 
                      AS Mois, DATEPART(YYYY, GETDATE()) AS Annee, 0 AS SumDelay, 0 AS SumIncident, 0 AS MTBF, 0 AS MTTF, 100 AS Dispo
FROM         ServerGroup INNER JOIN
                      Server ON ServerGroup.GroupId = Server.GroupId
WHERE     (Server.OutProdState = 0)
GROUP BY ServerGroup.GroupId, ServerGroup.GroupName


Elle tient en une requête et fait exactement ce que je voulais obtenir. Je vais ainsi pouvoir la placer dans une fonction d'une page asp. :)
Répondre à Melaus
Logiciels pertinents trouvés dans les téléchargements
Télécharger WAMP Server 2.0cWAMP Server - WAMP5 (WAMP signifiant Windows Apache Mysql PHP) est une plateforme de développement Web sous Windows. Il vous permet de...Catégorie: Serveurs
Licence: Freeware/gratuit
Télécharger AVS Disc Creator 2.1.5.100AVS Disc Creator - Avec AVS DiscCreator vous pouvez rapidement graver vos données sur CD/DVD et Blu-ray disc. <h2>Fonctionnalités</h2> ...Catégorie: Gravure
Licence: Freeware/gratuit
Télécharger Visual Basic 6 Runtime (VB6 DLL) 6.0 SP5Visual Basic 6 Runtime (VB6 DLL) - Le Runtime Visual Basic 6 contient l'ensemble des librairies (DLL) nécessaires pour exécuter des programmes écrits en...Catégorie: Librairies (DLL)
Licence: Freeware/gratuit
Télécharger MySQL 5.0.67MySQL - MySQL est une des systèmes de gestion de bases de données le plus répandu au monde. Catégorie: Bases de données
Licence: Open Source
Plus de logiciels gratuits sur « SQL requete INSERT »