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

Développement SQL Server Discussion :

Créer une table à partir d'une autre


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Créer une table à partir d'une autre
    Bonjour à tous et à toutes,

    Pour la création d'une page web afin de visualiser des graphiques de production, j'aimerais savoir s'il est possible de créer une table qui entre deux horaires donnent le nombre d'éléments crées ? Imaginons, entre 9h et 10h, il y a eu 10 produits confectionnés (ce nombre est obtenu grâce aux nombres de lignes présentes entre 9h et 10h).
    J'aimerais donc créer une table en plus de mon autre table. La nouvelle table "checkerait" les données de l'autre pour ensuite écrire des données.

    En vous remerciant,
    AUFFRET Fabien

    PS : J'ai trouvé cette requête mais j'aimerais par la suite créer la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT CONVERT(CHAR(10), MaDate, 121) AS D, 
           DATEPART(HOUR, MaDate) AS H,
           COUNT(*) AS NOMBRE
    FROM   MaTable
    GROUP BY CONVERT(CHAR(10), MaDate, 121), 
             DATEPART(HOUR, MaDate)

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Essayez le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT CONVERT(CHAR(10), MaDate, 121) AS D, 
           DATEPART(HOUR, MaDate) AS H,
           COUNT(*) AS NOMBRE
    INTO Matable2
    FROM   MaTable
    GROUP BY CONVERT(CHAR(10), MaDate, 121), 
             DATEPART(HOUR, MaDate)
    MCSA SQL SERVER |MCT | MVP Data Platform

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu peux aussi créer une vue, mais ton besoin n'étant pas très clair, je ne sais pas ce qui te conviendrait le mieux.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Julien94320, je vais essayer votre code dans la matinée. Merci encore une fois !

    Pour mon souci, je vais mieux détailler. En fait, dans ma BDD de production, je n'ai pas le nombre de produits terminés par heure mais seulement une ligne qui s'ajoute avec une date + heure quand un est fini. Je voudrais les regrouper par heure (mais que la date reste en compte tout de même) pour pouvoir utiliser les données sur une page web (placement de graphiques).

    J'aimerais savoir s'il est possible de créer cette table en fonction de la date actuelle. J'ai besoin de créer une table qui prend juste les données entre jour actuelle et jour actuelle -1 pour ensuite les afficher sur un graphique.

    Merci à vous deux.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nLineMayuri Voir le message
    J'aimerais savoir s'il est possible de créer cette table en fonction de la date actuelle. J'ai besoin de créer une table qui prend juste les données entre jour actuelle et jour actuelle -1 pour ensuite les afficher sur un graphique.
    Une vue !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Je vais faire plusieurs graphes en fonction de la date du jour.

    J'ai un autre souci, je veux lire le nombre de valeur = 1 dans le champ RESULTAT qui est dans une autre table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT CONVERT(CHAR(10), DATE, 121) AS DATE, 
           DATEPART(HOUR, DATE) AS HEURE,
           COUNT(*) AS NOMBRE,
    	   COUNT(*) RESULTAT=1
    into test
    FROM   table1, table2
    GROUP BY CONVERT(CHAR(10), DATE, 121), 
             DATEPART(HOUR, DATE)
    RESULTAT se trouve dans la deuxième table.. Ma requête est archi fausse.

  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Je ne comprend pas votre demande je vais essayer une ébauche ... Mais avec un exemple simple et concret ça serait plus facile de vous expliquer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT CONVERT(CHAR(10), DATE, 121) AS DATE, 
           DATEPART(HOUR, DATE) AS HEURE,
           COUNT(*) AS NOMBRE,
           COUNT(*) RESULTAT
    INTO test
    FROM   table1, table2 on table1.id = table2.id
    GROUP BY CONVERT(CHAR(10), DATE, 121), 
                    DATEPART(HOUR, DATE)
    HAVING COUNT(*)=1
    MCSA SQL SERVER |MCT | MVP Data Platform

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Je vais mieux vous expliquer. En fait je dois faire un graphique qui en fonction de l'heure donne un nombre de produits confectionnés. (Tout ça se passe dans la table1).
    Et sur le même graphique, je souhaite implanter un pourcentage (FPY), mais je dois aller chercher la valeur dans une autre table (table2 qui donne le champ RESULTAT).

    Je souhaite, en plus du regroupement du nombre de produits crées par heure, le nombre de RESULTAT=1 chaque heure.

    J'espère que je suis assez claire dans mon explication..

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    J'aimerais également effectuer un regroupement par plage horaire afin de compter le nombre de produits confectionnés.

    Voici ma table : Nom : DATEACTUELLE.png
Affichages : 783
Taille : 4,7 Ko

    Mon code pour créer cette table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * INTO DATEACTUELLE FROM TOUSLESBANCS WHERE DATE=CONVERT (date, GETDATE())
    MERCI !

    J'ai avancé pour la question avec celle-ci, maintenant je suis encore bloqué, j'obtiens ceci dans ma table :

    Nom : FPY.png
Affichages : 838
Taille : 9,8 Ko
    Ce que je souhaite, c'est faire un calcul bête et méchant. Le calcul est à chaque fois le même pour deux lignes. Par exemple ligne 1 et ligne 2 : 100 - ((NOMBRE.LIGNE1/(NOMBRE.LIGNE1+NOMBRE.LIGNE2))*100)

  10. #10
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Bonjour,

    Essayez donc une requete dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT 100 - ((ligne1.NOMBRE.LIGNE1/(Ligne1.NOMBRE.LIGNE1+Ligne2.NOMBRE.LIGNE2))*100)
    FROM MATABLE Ligne1 INNER JOIN Matable Ligne2 on ligne1.ID = ligne2.ID+1
    WHERE ligne1.id < max(ligne1.id)
    Après si vous etes sous SQL SERVER 2014 vous avez aussi la possibilité d'utiliser les fonctions LAG et LEAD qui pourront vous être d'une plus grande aide ... (mon exemple précédent est faux mais vous donne la logique de votre requete)


    pour les exemples :

    https://msdn.microsoft.com/fr-fr/library/hh231256.aspx
    https://msdn.microsoft.com/fr-fr/library/hh213125.aspx
    MCSA SQL SERVER |MCT | MVP Data Platform

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Merci bien Julien, c'est vrai que LAG et LEAD vont vraiment m'aider étant donné que je connais pas le nombre de lignes totales.
    J'ai un autre problème pour copier et coller une colonne dans une autre table (ses valeurs avec).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE FPYTEST1
    ADD RESULTAT0 INT NULL
     
    UPDATE FPYTEST1
    SET RESULTAT0 = FPYTEST2.RESULTAT0
    FROM FPYTEST2
    J'obtiens la même valeur pour toutes les lignes dans RESULTAT0.. (Valeur de la 1ère ligne)

  12. #12
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    La vue semble bien adaptée à votre besoin.
    Il suffit simplement de s'assurer qu'il y ait un index qui supporte l’agrégat.

    @++

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Problème résolu, pour ceux qui ont un souci similaire, voici ce que j'ai trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AALTER TABLE FPYTEST1
    ADD RESULTAT0 INT
     
    update 	FPYTEST1
    set	FPYTEST1.RESULTAT0	= FPYTEST2.RESULTAT0
    from	FPYTEST1 inner join FPYTEST2
    	on	FPYTEST1.ID	= FPYTEST2.ID
    Merci à tous ceux qui ont répondu. Je vous remercie d'avoir perdu du temps pour m'aider !

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    J'ai sûrement d'autres questions. Celle qui me vient en tête est par rapport au visuel. Est-il possible depuis une requête SQL de modifier la colonne heure. A la place de 6h, je voudrais 6h00, idem pour les autres. Merci !

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Une autre question, comment insérer une colonne qui fera le calcul ligne par ligne suivant :
    (100 - (RESULTAT1/(RESULTAT0+RESULTAT1) * 100))

    Merci à vous.

    Pour faire un test, j'ai entré cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ALTER TABLE BANC1 ADD FPY DECIMAL(12,4)
     
    UPDATE BANC1
    SET BANC1.FPY = (BANC1.RESULTAT0/24)
    FROM BANC1
    Le problème c'est que ça me renvoie quand même 0,0000 dans la colonne FPY..

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/06/2012, 13h12
  2. Créer une table à partir d'une autre table
    Par mayss dans le forum PL/SQL
    Réponses: 3
    Dernier message: 21/08/2008, 10h25
  3. [Tables] Update d'une table à partir d'une autre
    Par le_niak dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/01/2008, 10h01
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h24
  5. Créer une table à partir d'une autre dans un script
    Par Dam)rpgheaven dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 24/06/2005, 11h55

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