IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[SQL]Problème requête INSERT


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut [SQL]Problème requête INSERT
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    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 ?

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    pourquoi est ce que tu rajoutes pas une colonne multiplicateur dans ta première table où tu mets NULL.

    Ensuite tu updates le multiplicateur avec ta seconde requête.


    Mais je n'ai peut-être rien compris

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Je ne sais pas si je peux modifier les tables
    C'est pour ça que je tente d'y arriver sans.

    En gros
    - la table Host contient L'identifiant et le nom de l'host.
    - La table Server contient l'identifiant serveur, l'identifiant de l'host auquel il appartient et le nom du serveur.

    Dans la table statistique, je dois inserer pour chaque host

    Id | -> l'identifiant de l'host
    Host | -> le nom de l'host
    NbrSecProd | -> le nombre de seconde de fonctionnement ((3600secs x 24h) x nbr de jour du mois en cours) x le nombre de serveurs appartenants à l'host (c'est là que je bloque -_-)
    Mois | -> mois en cours
    Annee | -> année en cours
    SumDelay | -> 0
    SumIncident | -> 0
    MTBF | -> 0
    MTTR | -> 0
    Dispo | -> 100

    Je devrais donc reussir à faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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') *  
    (SELECT COUNT(*) AS Expr1 FROM Server INNER JOIN ServerGroup ON Server.GroupId = ServerGroup.GroupId  WHERE Server.OutProdState = 0) GROUP BY ServerGroup.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 AS ServerGroup_1
    dsl pour le pavé >_<

    Sans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "*(SELECT COUNT(*) AS Expr1 FROM Server INNER JOIN ServerGroup ON Server.GroupId = ServerGroup.GroupId  WHERE Server.OutProdState = 0) GROUP BY ServerGroup.GroupId)"
    la requête fonctionne (je dois faire la même manip pour les serveurs)

  4. #4
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    c'est quel SGBD ?

    Tu peux peut-être créer une table temporaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ...
    INTO #data
    FROM ...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Bon j'ai finis par trouver une solution qui fonctionne ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
    En gros j'ai "fusionné" les deux requêtes en une seule.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] problème d'insertion dans ma base ou problème de requête sql
    Par maroco31 informatik dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/06/2007, 08h16
  2. [SQL] Problème requêtes SQL
    Par djedje37et28 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/07/2006, 21h31
  3. [SQL] Problème requête SELECT
    Par dolf13 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 04/07/2006, 23h54
  4. [SQL] Problème requête sql,rajouter une valeur,checbox
    Par snakejl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/06/2006, 11h18
  5. [SQL] Problème requête sur 2 tables
    Par temperature dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 20/04/2006, 12h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo