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éation d'une table calendrier pour vérifier des périodes de transmission de data.


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Création d'une table calendrier pour vérifier des périodes de transmission de data.
    Bonjour,

    Je souhaite écrire une requête qui donne les journées non reçue sur une période.
    je dispose :
    • d'une table des Journées reçues [TA]
    • d'une table des jours non travaillés [TB]



    je souhaite créer une table calendrier [TC] pour écrire ma requête tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select  jour_calendrier   from [TC]  where
     jour_calendrier  not in (select jour_reçu from [TA])
     and jour_calendrier not in ( select jour_non_travaillé from [TB]
    La question est comment créer et remplir cette table avec SQL SERVER 2008 ?

    il est entendu si il y'a une solution encore plus simple pour obtenir le resultat je suis preneur

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Pas de solutions miracle, vous devez passer par du T-SQL pour lancer une routine d'alimentatioN.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Pas de solutions miracle, vous devez passer par du T-SQL pour lancer une routine d'alimentatioN.
    Insérer des enregistrements 1 par 1, c'est lent.
    Pour aller plus vite, on veut ajouter de nombreux enregistrements en une seule transaction.

    Pour cela on peut utiliser certaines "astuces" :

    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
    DECLARE @DateBegin DATETIME
    SET @DateBegin = '2013-12-31'
     
    SELECT @DateBegin = MAX(jour_calendrier)
    FROM [TC]
     
    ; WITH Numbers AS
    (
        SELECT TOP 1000
            ROW_NUMBER() OVER(ORDER BY object_id)
                AS Num
        FROM sys.all_objects
    )
    INSERT INTO [TC](jour_calendrier)
    SELECT DATEADD(Day, Num, @DateBegin)
    FROM Numbers
    ;
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  4. #4
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Citation Envoyé par pcaboche Voir le message
    Insérer des enregistrements 1 par 1, c'est lent.
    Pour aller plus vite, on veut ajouter de nombreux enregistrements en une seule transaction.

    Pour cela on peut utiliser certaines "astuces" :

    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
    DECLARE @DateBegin DATETIME
    SET @DateBegin = '2013-12-31'
     
    SELECT @DateBegin = MAX(jour_calendrier)
    FROM [TC]
     
    ; WITH Numbers AS
    (
        SELECT TOP 1000
            ROW_NUMBER() OVER(ORDER BY object_id)
                AS Num
        FROM sys.all_objects
    )
    INSERT INTO [TC](jour_calendrier)
    SELECT DATEADD(Day, Num, @DateBegin)
    FROM Numbers
    ;
    Ai-je parlé de faire cela enregistrement par enregistrement??? J'ai parlé de tsql attention aux raccourcis !
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Ai-je parlé de faire cela enregistrement par enregistrement??? J'ai parlé de tsql attention aux raccourcis !
    En même temps, tu ne donnes pas vraiment de solution pour alimenter la table, donc bon...

    En lisant "routine d'alimentation", nombreux sont ceux qui risquent de penser à une solution impliquant une boucle WHILE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHILE ...
    BEGIN
      INSERT ...
      ...
    END
    D'autres solutions existent.

    Au passage, j'ai vu des gens utiliser "sys.all_columns" plutôt que "sys.all_objects" :
    http://sqlperformance.com/2013/01/t-...nerate-a-set-2 (Appendix)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    En même temps, tu ne donnes pas vraiment de solution pour alimenter la table, donc bon...
    La première qualité d'un développeur est de savoir chercher un mimimum, je le mets sur la piste sans lui faire ses devoirs.

    Bon nombre de post ici concerne des étudiants ou autres qui se contente de demander, j'ai quelque chose à faire merci de m'envoyer la solution, sous format word si possible
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par iberserk Voir le message
    La première qualité d'un développeur est de savoir chercher un mimimum, je le mets sur la piste sans lui faire ses devoirs.

    Bon nombre de post ici concerne des étudiants ou autres qui se contente de demander, j'ai quelque chose à faire merci de m'envoyer la solution, sous format word si possible
    Oui, c'est vrai (malheureusement).

    Après, il y a plein de cas de figure :

    - tu fais une recherche, tu tombes sur des solutions pas toujours terribles tu implémentes une solution pas terrible sans le savoir (ça arrive)

    - tu fais une recherche, tu tombes sur des solutions de qualité inégale, tu as du mal à "séparer le bon grain de l'ivraie" tu demandes conseil sur un forum comme celui-ci

    - tu as une implémentation en tête, mais tu te demandes s'il y a une meilleure façon de faire tu demandes conseil

    - etc.


    Généralement, les cas de "faites mes devoirs", c'est pas juste sur une question précise, c'est carrément un copié-coller de l'exo.

    Là, même si c'est un cas de "faites mes devoirs", il va devoir chercher pas mal de trucs (qu'est-ce que "sys.all_columns" et "sys.all_objects" ? Pourquoi et comment on l'utilise ici ? Quelles sont les limitations ? Qu'est-ce que ROW_NUMBER() et comment ça marche ? Qu'est-ce qu'une CTE ? À quoi sert le SELECT MAX au début ? ...).

    Bref, beaucoup plus de questions soulevées qu'avec une boucle WHILE... Si c'est bien un cas de "faites mes devoirs" et qu'il copie sans chercher à comprendre, il court le risque de se faire griller.

    Et si c'est un développeur, et bien il a plein de trucs à chercher maintenant !
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  8. #8
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    sqlpro a écrit un papier où il donne le code tout fait pour créer une table de dates.

    Si mes souvenirs sont bons, y a même une ou deux erreurs dedans qui oblige à comprendre le fonctionnement du bousin sinon ça marche pas .

    Je me souviens que je m'étais demandé à l'époque si ces erreurs avaient été implantées là exprès pour faire réfléchir les gens (il est en capable le bougre ).
    Kropernic

Discussions similaires

  1. [2012] Création d'une table calendrier
    Par Adrien.B dans le forum Développement
    Réponses: 3
    Dernier message: 25/09/2013, 14h43
  2. [MLD] Avis : Création d'une table "catégorie" pour e-commerce
    Par te-san dans le forum Schéma
    Réponses: 2
    Dernier message: 29/07/2010, 13h47
  3. Comment créer une table sas pour gérer des queries
    Par arnaldo1974 dans le forum Administration et Installation
    Réponses: 1
    Dernier message: 02/12/2009, 14h39
  4. Réponses: 3
    Dernier message: 06/04/2009, 21h58
  5. Réponses: 4
    Dernier message: 22/11/2007, 19h23

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