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 :

afficher les Jours du mois


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut afficher les Jours du mois
    Bonjour,
    Voila je souhaiterais afficher tous les jours de la periode que j'indique, meme si il n'y a pas d'enregistrement. Existe t'il une possibilité que je puisse ajouter a ma requête ci dessous :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    select 
    T.Date,
    T.Jours,
    T.Affaire,
    T.Perso,
    T.Equipe
    from
    (
        select
        convert(char(10),T1.[Journée],103) as Date,
        T1.[Absence] as Jours,
        T1.[Agence Origine] as Affaire,
        T1.[Ressource] as Perso,
        T1.[Equipe] as Equipe
        from dbo.[SOCIETE$Emploi du temps] T1
        inner join dbo.[SOCIETE$Filtre Export Paye] T2
        on T1.[Ressource] = T2.[Code Resource Associée]
        where T2.[Code Ressource] = 'TOTO'
        and T1.Absence = '1'
        and T1.[Type] = '0'
        and T1.[Journée] between '01/08/2010' and '31/08/2010'
        --order by [Journée]
     
    union all
     
        select
        convert(char(10),T1.[Forecast Date],103) as Date,
        cast(T1.[Forecast Quantity (Base)] as float) as Jours,
        T1.[Document No_] as Affaire,
        T1.[Ressource] as Perso,
        T1.[Equipe] as Equipe
        from dbo.[SOCIETE$Production Chantier] T1
        inner join dbo.[SOCIETE$Filtre Export Paye] T2
        on T1.[Ressource] = T2.[Code Resource Associée]
        where T2.[Code Ressource] = 'TOTO'
        and T1.[No_] = 'PR'
        and T1.[Forecast Date] between '01/08/2010' and '31/08/2010'
        --order by T1.[Ressource],T1.[Forecast Date]
    )T
    order by Perso,Date
    MERCI pour votre aide et vos remarques.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Dans une base de données, vous ne trouverez que ce que vous y avez mis. La recherche de quelque chose qui n'existe pas donne systématiquement un résultat vide !

    Pour résoudre ce problème il existe différentes solutions :
    1) rajouter une table de calendrier avec toutes les dates comme je l'indique ici : http://sqlpro.developpez.com/cours/gestiontemps/
    C'est de loin la solution la plus performante !

    2) générer les dates manquantes, à la volée dans la requête, par exemple à l'aide d'une requêtes récursive de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH
    T0 AS (SELECT CAST('2000-01-01' AS DATE) AS JOUR),
    T1 AS (SELECT JOUR FROM T0
           UNION  ALL
           SELECT DATEADD(day, 1, JOUR)
           FROM   T1
           WHERE  DATEADD(day, 1, JOUR) <= '2010-12-31')
    SELECT *
    FROM   T1
    OPTION(maxrecursion 10000)
    Qui génére une table des dates du 1/1/200 au 31/12/2010.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    merci SQLpro
    je vais tester la deuxieme solution

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Vous avez raison de choisir la plus mauvaise... A moyen terme, cela nous donne de la marge pour intervenir en audit, tuning et conseil divers sur les performances, avec un tarif à ce jour de 1250 € HT la journée !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Vous avez raison de choisir la plus mauvaise... A moyen terme, cela nous donne de la marge pour intervenir en audit, tuning et conseil divers sur les performances, avec un tarif à ce jour de 1250 € HT la journée !

    A +
    Effectivement la deuxième est mauvaise.
    Tout comme la première n'est pas nécessaire.

    (1250€ HT... ça fait cher pour ce résultat)

    Faites plutôt une recherche sur les "TALLY TABLE" ou "NUMBER TABLE", des tables artificielles qui représentent tous les nombres compris dans certains intervalles (par ex de 0 à 4294967295).

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    ...
    Tout comme la première n'est pas nécessaire.
    C'est bien des démolir les petits copains, mais peut tu expliquer pourquoi ?

    Ce serait au moins faire preuve d'honnêteté !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Donc vous n'admetterez pas que votre solution n'est pas nécessaire ?
    Il n'y aurait à votre connaissance et en tenant compte des pistes que je donnais pas plus simple et aussi efface voire plus efficace que ce que vous proposez ?

    Faire preuve d'honnêteté.... Je suis pété de lol.

  8. #8
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Donc vous n'admetterez pas que votre solution n'est pas nécessaire ?
    Il n'y aurait à votre connaissance et en tenant compte des pistes que je donnais pas plus simple et aussi efface voire plus efficace que ce que vous proposez ?
    Faire preuve d'honnêteté.... Je suis pété de lol.
    Bonjour Sergejack,

    As-tu un exemple concret sur les "TALLY TABLE" ou "NUMBER TABLE" dont tu parles ?

    Quelles sont les avantages de cette méthode que tu proposes ?

    Peux-tu nous éclairer sur l'inefficacité de la méthode proposée par SQLPro ?

    http://sqlpro.developpez.com/cours/gestiontemps/

    As-tu une proposition pour backdraf ? qui dit ceci :
    je souhaiterais afficher tous les jours de la periode que j'indique, meme si il n'y a pas d'enregistrement. Existe t'il une possibilité que je puisse ajouter a ma requête ci dessous
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    SELECT 
    T.Date,
    T.Jours,
    T.Affaire,
    T.Perso,
    T.Equipe
    FROM
    (
        SELECT
        convert(char(10),T1.[Journée],103) AS Date,
        T1.[Absence] AS Jours,
        T1.[Agence Origine] AS Affaire,
        T1.[Ressource] AS Perso,
        T1.[Equipe] AS Equipe
        FROM dbo.[SOCIETE$Emploi du temps] T1
        INNER JOIN dbo.[SOCIETE$Filtre Export Paye] T2
        ON T1.[Ressource] = T2.[Code Resource Associée]
        WHERE T2.[Code Ressource] = 'TOTO'
        AND T1.Absence = '1'
        AND T1.[Type] = '0'
        AND T1.[Journée] BETWEEN '01/08/2010' AND '31/08/2010'
        --order by [Journée]
     
    union ALL
     
        SELECT
        convert(char(10),T1.[Forecast Date],103) AS Date,
        cast(T1.[Forecast Quantity (Base)] AS float) AS Jours,
        T1.[Document No_] AS Affaire,
        T1.[Ressource] AS Perso,
        T1.[Equipe] AS Equipe
        FROM dbo.[SOCIETE$Production Chantier] T1
        INNER JOIN dbo.[SOCIETE$Filtre Export Paye] T2
        ON T1.[Ressource] = T2.[Code Resource Associée]
        WHERE T2.[Code Ressource] = 'TOTO'
        AND T1.[No_] = 'PR'
        AND T1.[Forecast Date] BETWEEN '01/08/2010' AND '31/08/2010'
        --order by T1.[Ressource],T1.[Forecast Date]
    )T
    ORDER BY Perso,Date
    Merci d'avance
    Etienne ZINZINDOHOUE
    Billets-Articles

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Donc vous n'admetterez pas que votre solution n'est pas nécessaire ?
    La solution que j'ai donné dans cet article (datant de plus de 10 ans) repose sur la création d'une table de date.... Ce que vous appelez TALLY TABLE.
    Donc, vous n'avez même pas lu l'article que j'ai mentionné !

    Il n'y aurait à votre connaissance et en tenant compte des pistes que je donnais pas plus simple et aussi efface voire plus efficace que ce que vous proposez ?
    Une table en dure et bien indexée est plus rapide que toute autre solution.

    Faire preuve d'honnêteté.... Je suis pété de lol.
    De l'aérophagie ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    euh j'ai posé la question , pour des besoins ponctuels , si effectivement ce besoin devenait recurant je pense effectivement choisir la solution d'une creation de table.
    n'oublier pas que je suis un novice et que certaines subtilités m'echappent

    Merci pour vos reponses

Discussions similaires

  1. [10gR2] Afficher les jours d'un mois
    Par lbar012001 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 27/10/2013, 14h49
  2. Cross tab afficher tous les jours du mois
    Par David55 dans le forum BIRT
    Réponses: 11
    Dernier message: 27/12/2010, 13h08
  3. [Dates] Afficher les jours du mois dans un formulaire
    Par Jimmy Monkey dans le forum Langage
    Réponses: 7
    Dernier message: 30/12/2007, 11h27
  4. afficher les jours d'un mois
    Par lido dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/03/2006, 23h38
  5. Réponses: 4
    Dernier message: 25/11/2004, 11h17

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