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 :

Requête SQL server


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 29
    Points : 11
    Points
    11
    Par défaut Requête SQL server
    Bonjour a tous,
    Dans le cadre de la réalisation d'un entrepôt de données, je souhaite réaliser une requête SQL (SQL server) d'une mesure du fait 'statistique', comme table (dimension) j'ai: table d'individus avec (id_individus) , table temps (id_date) et table ville (id_ville) qui contient la population de chaque ville.
    Le calcul souhaité: X= nombre d'individus dans une période+ nombre d'individus pendant 5 jours avant/ 2% de la population. par exemple, je souhaite calculer le nombre d'individus dans la période 15-11-2014-20-11-2014, la valeur de X = nombre d'individus entre 15-11-2014 et 20-11-2014+nombre d'individus entre 10-11-2014 et 14-11-2014/2% de la population.
    Merci bien

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Et quelle est la question ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Ma question: une requête qui calcule X, j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_date between id_date-5 and id_date+5
    , mais ça n'a pas marché, juste comment calculer le nombre d'individus dans les 5 jours avant la date id_date.
    J’espère que c'est clair!
    Merci

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,
    Citation Envoyé par Anna69 Voir le message
    J’espère que c'est clair!
    Non !

    Postez la structure des tables sous forme de CREATE TABLE, un jeu d'essai sous forme de INSERT INTO, le résultat attendu, et la requete (complète) que vous avez écrite.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Il faudrait nous donenr l'intégralité de la requête (réduite aux éléments utiles) pour pouvoir t'aider.
    Mais déjà id_date between id_date-5 and id_date+5 sera toujours vérifié.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    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
    Quelque chose comme ça :
    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
    ; WITH Periods
    AS
    (
      SELECT 
        id_ville,
        SUM(
          CASE WHEN @id_date1 <= id_date AND id_date < @id_date2
          THEN NbPeople
          ELSE 0 END
        )
          AS NbPeriod1,
     
        SUM(
          CASE WHEN @id_date2 <= id_date AND id_date <= @id_date3
          THEN NbPeople
          ELSE 0 END
        )
        AS NbPeriod2
      FROM statistique
      WHERE @id_date1 <= id_date AND id_date <= @id_date3
      GROUP BY id_ville
    )
    SELECT 
      id_ville, 
      (NbPeriod1 + NbPeriod2) * 100 / (2 * NbPeriod2)
        AS Val
    FROM Periods
    ?
    "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...

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    voici le code des tables:
    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
    41
    42
    43
    44
    45
    46
    47
     
    CREATE TABLE [dbo].[Fact_MedicalStatistics](
    	[Health_Care_Facility_ID] [int] NOT NULL,
    	[Week_ID] [char](10) NOT NULL,
    	[Month_ID] [char](7) NOT NULL,
          [ville_ID] [int] NOT NULL,
    	[Sex] [nvarchar](1) NOT NULL,
    	[age_range] [nchar](6) NOT NULL,
    	[X] [real] NULL,
    	CONSTRAINT [PK_Fact_MedicalStatistics] PRIMARY KEY CLUSTERED 
    (
    	[Health_Care_Facility_ID] ASC,
    	[Week_ID] ASC,
    	[Month_ID] ASC,
    	[Sex] ASC,
    	[age_range] ASC
          [ville_ID] ASC
    )
    CREATE TABLE [dbo].[Dim_Week](
    	[Week_ID] [char](10) NOT NULL,
    	[Month_ID] [char](7) NOT NULL,
     CONSTRAINT [PK_Dim.Week] PRIMARY KEY CLUSTERED 
    (
    	[Week_ID] ASC,
    	[Month_ID] ASC
    )
    CREATE TABLE [dbo].[Dim_Health_Care_Facility](
    	[Health_Care_Facility_ID] [int] NOT NULL,
    	[Health_Care_Facility] [nvarchar](20) NULL,
    	[Adress] [nvarchar](30) NULL,
    	[ville_ID] [int] NOT NULL,
     CONSTRAINT [PK_Dim.Health_Care_Facility] PRIMARY KEY CLUSTERED 
    (
    	[Health_Care_Facility_ID] ASC
    )
    CREATE TABLE [dbo].[Dim_Age_range](
    	[age_range] [nchar](6) NOT NULL,
     CONSTRAINT [PK_Age_group] PRIMARY KEY CLUSTERED 
    (
    	[age_range] ASC
    )
    CREATE TABLE [dbo].[Dim_Sex](
    	[Sex] [nvarchar](1) NOT NULL,
     CONSTRAINT [PK_Dim_Sex] PRIMARY KEY CLUSTERED 
    (
    	[Sex] ASC
    )
    et le code de insert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select I. etablissement_ID, D.id_semaine,D.Id_mois, I.Adresse, I.sexe,I.TA,
    COUNT (*)/(0.02* C.population) as X 
    from Individus I 
    join ville C on (I.Adresse =C.Id_ville)
    join [Date] D on (I.Id_date=D.Id_date)
    where id_date between id_date-5 and id_date+5
    group by I.N_établissement, D.id_semaine,D.Id_mois, I.Adresse,I.sexe,I.TA, C.population
    Sachant que je rempli la table du fait Statistique a partir de la table source individus :
    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
     
    CREATE TABLE [dbo].[Individus](
    	[N] [int] NOT NULL,
    	[Nom] [nvarchar](25) NULL,
    	[Prénom] [nvarchar](20) NULL,
    	[Age] [float] NULL,
    	[Sexe] [nvarchar](1) NULL,
    	[Adresse] [int] NULL,
    	[N_établissement] [int] NULL,
    	[Id_date] [date] NULL,
    	[TA] [nchar](6) NULL,
     CONSTRAINT [PK_Individus] PRIMARY KEY CLUSTERED 
    (
    	[N] ASC
    )
    Merci

  8. #8
    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
    Comme ça :

    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
    ; WITH Periods
    AS
    (
      SELECT DISTINCT 
        W.[Week_ID],
        W.[Month_ID],
        D2.[Id_date]
      FROM [dbo].[Dim_Week] W
      INNER JOIN [Date] D1
        ON (W.[Month_ID] = D1.[Id_mois]
        AND W.[Week_ID]  = D1.[id_semaine])
      INNER JOIN [Date] D2
        ON (DATEADD(day, -5, D1.[Id_date]) <= D2.[Id_date]
        AND D2.[Id_date] <= D1.[Id_date])
    )
    SELECT
      I.[N_établissement],
      P.[Week_ID],
      P.[Month_ID],
      I.[Adresse],
      I.[Sexe],
      I.[TA],
      I.[Adresse],
      COUNT(*) / (0.02 * C.[population])
        AS X 
    FROM Periods P
    INNER JOIN [dbo].[Individus] I
      ON (P.[Id_date] = I.[Id_date])
    INNER JOIN [ville] C
      ON (I.[Adresse] = C.[Id_ville])
    GROUP BY
      I.[N_établissement],
      P.[Week_ID],
      P.[Month_ID],
      I.[Adresse],
      I.[Sexe],
      I.[TA],
      I.[Adresse],
      C.[population]
    ?
    "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...

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Je viens de terminer la vérification de X avec mes données, votre code fonctionne parfaitement.
    Merci bien

  10. #10
    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 Anna69 Voir le message
    Je viens de terminer la vérification de X avec mes données, votre code fonctionne parfaitement.
    Cool !
    J'étais même pas sûr de comprendre le problème (pour répondre à ta question : non, ce n'était pas clair ).

    Je pense qu'il est possible d'améliorer la sélection des dates (en évitant une jointure).
    Comme ceci :
    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
    ; WITH Periods
    AS
    (
      SELECT DISTINCT 
        W.[Week_ID],
        W.[Month_ID],
        DATEADD(day, delta.d, D.[Id_date]) AS [Id_date]
      FROM [dbo].[Dim_Week] W
      INNER JOIN [Date] D
        ON (W.[Month_ID] = D.[Id_mois]
        AND W.[Week_ID]  = D.[id_semaine])
      CROSS JOIN
      (
        SELECT -5 AS d
        UNION ALL
        SELECT 0
      ) delta
    )
    ...
    "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...

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Ça marche
    Merci

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Suite à une validation de ce cette requête avec une BD importante, j'ai pas trouvé un problème de calcul
    J'explique mieux:
    Je veux calculer X pour une période définie par l'utilisateur supposant entre 01/11/14 et 08/11/2014, dans le cas normale on utilise directement la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COUNT(*) / (0.02 * C.[population])
    MAIS dans mon cas je veux calculer X de la même période (entre 01/11/14 et 8/11/2014), mais on ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     COUNT(*) / (0.02 * C.[population])
    à X de 5 jours avant, c-à-d réellement c'est la période (entre 27/10/14 et 8/11/2014)
    Merci bien

  13. #13
    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
    1. on comprend rien, parle français
    2. tu veux qu'on fasse ton boulot ou quoi ?
    "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...

Discussions similaires

  1. Fermeture des requêtes SQL Server
    Par zwina2004 dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/10/2007, 16h17
  2. [Requête] SQL SERVER 2000 / Transact SQL
    Par plutonium719 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/09/2007, 17h56
  3. Aidez moi pour une requête SQL server
    Par pop10 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 19/06/2007, 22h15
  4. Réponses: 2
    Dernier message: 04/04/2006, 11h46

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