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 :

[SQL/TSQL]Construction de table de pointage [2012]


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [SQL/TSQL]Construction de table de pointage
    Bonjour à tous,
    Je n'arrive pas a voir comment procéder pour construire une nouvelle table en décomposant une période DATE (entre DebutAbsence et FinAbsence) en ayant une nouvelle ligne par jours, pour chacune des lignes de ma table .
    Désolé pour l'explication, j'ai du mal à formuler ce que je cherche a avoir :/. Des screen seront peux être plus parlant
    Voilà ce que j'ai :
    Nom : cassiop-db-val - Remote Desktop Connection.png
Affichages : 419
Taille : 9,3 Ko

    Voilà ce que je cherche à avoir :
    Nom : Microsoft Excel - export cle 2.csv.png
Affichages : 412
Taille : 6,2 Ko

    Merci d'avance.

  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
    21 768
    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 : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Voici une requête pour ce faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH 
    T1 AS
    (SELECT MIN(DebutAbsence) AS DD, MAX(FinAbsence) AS DF
     FROM   Matable),
    T2 AS
    (SELECT DD AS JOUR
     FROM   T1
     UNION ALL
     SELECT DATEADD(day, 1, JOUR)
     FROM   T2
            JOIN T1
                 ON T2.HOUR < T1.DF)
    SELECT *
    FROM   T2;
    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
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour et merci pour votre réponse mais ce n'est pas tout à fait ce que je recherche.

    Je veux décomposer chaque lignes en plusieurs lignes, en fonction du delta des date entre les colonnes début et fin.

  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
    21 768
    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 : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par miniduff Voir le message
    Bonjour et merci pour votre réponse mais ce n'est pas tout à fait ce que je recherche.

    Je veux décomposer chaque lignes en plusieurs lignes, en fonction du delta des date entre les colonnes début et fin.
    Commencez alors par respecter la charte de postage, cela nous aider pour vous répondre totalement :
    http://www.developpez.net/forums/d96...vement-poster/

    En particulier DDL des tables et jeu d'essais.

    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
    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,

    On peut écrire la fonction de table en ligne suivante :

    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
    ALTER FUNCTION f_day_range_get
    	(
    		@_start_date datetime
    		, @_end_date datetime
    	)
    RETURNS TABLE
    WITH SCHEMABINDING
    AS
    RETURN
    (
    	WITH
    		B AS(SELECT NULL AS v UNION ALL SELECT NULL)
    		, N AS (SELECT A.v FROM B AS A CROSS JOIN B AS B)
    		, N1 AS (SELECT A.v FROM N AS A CROSS JOIN N AS B)
    		, N2 AS (SELECT A.v FROM N1 AS A CROSS JOIN N1 AS B)
    		, N3 AS (SELECT A.v FROM N2 AS A CROSS JOIN N2 AS B)
    		, D AS
    		(
    			SELECT	DATEADD(day, ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) - 1, CAST(@_start_date AS date)) AS dt
    			FROM	N3
    		)
    	SELECT	dt
    	FROM	D
    	WHERE	dt <= @_end_date
    )
    GO
    Voici un jeu d'essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE dbo.ze_dates
    (
    	date_deb datetime NOT NULL
    	, date_fin datetime NOT NULL
    )
    GO
     
    INSERT INTO dbo.ze_dates VALUES ('20160718 15:00', '20160726 18:00')
    INSERT INTO dbo.ze_dates VALUES ('20160930 10:00', '20160930 19:00')
    GO
    La requête est alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT		D.date_deb
    		, D.date_fin
    		, R.dt
    FROM		dbo.ze_dates AS D
    CROSS APPLY	dbo.f_day_range_get(D.date_deb, D.date_fin) AS R
    date_deb date_fin dt
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-18
    2016-09-30 10:00:00.000 2016-09-30 19:00:00.000 2016-09-30
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-19
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-20
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-21
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-22
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-23
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-24
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-25
    2016-07-18 15:00:00.000 2016-07-26 18:00:00.000 2016-07-26
    @++

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci elsuket ! C'est exactement ce que je souhaitais avoir.

    Bonne journée

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

Discussions similaires

  1. MS SQL SERVER et les tables temporaires
    Par beb_has_return dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/02/2005, 14h36
  2. Réponses: 3
    Dernier message: 11/01/2005, 08h20
  3. résultat de requêtte sql sous form de table
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 5
    Dernier message: 08/03/2004, 15h19
  4. [SQL] Sélection ds plusieurs table
    Par lord_paco dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/07/2003, 17h53
  5. [MS-SQL]requete sur 3 tables
    Par pascalT dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/04/2003, 11h24

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