[SQL]Problème de requête insert
Résolu
Melaus
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Melaus Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Melaus Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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
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
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 ? :)
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 ? :)
A voir également:
- [SQL]Problème de requête insert
- Touche insert - Guide
- Disk boot failure insert system disk and press enter - Guide
- Requete sql pix ✓ - Forum MySQL
- Logiciel sql - Télécharger - Bases de données
- Accéder à la fonction secondaire "insert" de ma touche "Delete" - Forum PC portable
2 réponses
Bonjour,
Quel SGBD utilises-tu ?
Si tu es sous SQL Server, tu peux par exemple passer par une fonction :
Ta requête SQL devient alors :
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) ENDJe 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 ServerGroupPar 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...
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 :
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. :)
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. :)