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 :

Calculer le nombre d'usagers différents sur plusieurs périodes [2014]


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Calculer le nombre d'usagers différents sur plusieurs périodes
    Bonjour,

    Voici mon problème. J'ai créé une requête qui inclut les colonnes suivantes : noDossier, Année, période. La colonne période contient des données de 1 à 13. J'aimerais connaître le nombre d'usagers différents à la période 1, de la période 1 à la période 2, de la période 1 à la période 3 ... Voici le code que j'ai fait pour avoir la liste d'usagers différents par période:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select distinct noDossier, annee, right ('00' + Convert(varchar,periode),2) as periode 
     
    from [dbo].[V_intervention_activite],[dbo].[rAutreDossier], [dbo].[V_identification], [dbo].[xeGAP_cubeJourParBeneficiaireParActivite]
     
    where DESCRSPROG ='A.C.C.U.' and [dbo].[V_intervention_activite].NODOSSIERCLIENT =[dbo].[rAutreDossier].NODOSSIERCLIENT  and [dbo].[V_identification].NODOSSIERCLIENT=[dbo].[V_intervention_activite].NODOSSIERCLIENT
    and ([dbo].[xeGAP_cubeJourParBeneficiaireParActivite].NODOSSIERLOCAL = [dbo].[V_intervention_activite].NODOSSIERLOCAL and jour = DHINTERVENTION) and descTypeActivite = 'directe' 
     
    Group by noDossier,annee,periode
    order by periode
    Ensuite, avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RunningValue(Fields!noDossier.Value,CountDistinct,Nothing)
    de Repport builder j'ai créé une matrice qui me donne le nombre d'usagers distincts par période. Il ne me manque plus que de créer une autre matrice qui permettrait de connaitre le nombre d'usagers distincts depuis la période 1 jusqu'à la période décidée par l'utilisateur dans les paramètres.

    Merci

  2. #2
    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,

    Vous devriez spécifier vos jointures suivant la norme SQL la plus récente
    Par ailleurs, je crois qu'il vous suffit d'ajouter un COUNT(*) pour obtenir le nombre d'utilisateurs.
    Tout cela nous donne la requête 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
    SELECT		noDossier
    		, annee
    		, RIGHT('00' + CONVERT(varchar, periode), 2) AS periode
    		, COUNT(*) AS nombre_utilisateur
    FROM		dbo.V_intervention_activite AS IA
    INNER JOIN	dbo.rAutreDossier AS AD
    			IA.NODOSSIERCLIENT = AD.NODOSSIERCLIENT
    INNER JOIN	dbo.V_identification AS I
    			I.NODOSSIERCLIENT = IA.NODOSSIERCLIENT
    INNER JOIN	dbo.xeGAP_cubeJourParBeneficiaireParActivite AS CJPBPA
    			ON CJPBPA.NODOSSIERLOCAL = IA.NODOSSIERLOCAL
    WHERE		DESCRSPROG ='A.C.C.U.'
    AND		jour = DHINTERVENTION
    AND		descTypeActivite = 'directe' 
    GROUP BY	noDossier, annee, periode
    ORDER BY	periode
    Il vous manque simplement les alias devant les colonnes qui participent à la requête.

    @++

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci pour le inner join,

    Je programme depuis un mois environ car nous pros est parti du bureau. Je suis donc en mode apprentissage grand "V". Malheureusement le count comme cela ne fonctionne pas car il ne calcul pas le nombre d'usager unique car voici un extrait de la sortie de mes données.

    noDossier annee periode nombre_utilisateur
    99688 2015 01 18
    106839 2015 01 13
    107351 2015 01 11
    107497 2015 02 16
    73475 2015 02 5
    95988 2015 02 9


    Normalement pour la période 1 le total devrait être 3 et pour la période 2 le total devrait être 15.


    Merci pour votre aide

  4. #4
    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
    Normalement pour la période 1 le total devrait être 3 et pour la période 2 le total devrait être 15.
    Pouvez-vous détailler comment vous obtenez ce résultat SVP ?

    @++

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Données
    Bonjour,

    J'ai simplement fait une extraction de la base de données et j'ai vérifié manuellement les résultats attendus.

  6. #6
    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,

    Fonctionnellement qu'est ce qui vous permet de faire cette distinction ?
    MCSA SQL SERVER |MCT | MVP Data Platform

  7. #7
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Détection des doublons
    Pour chaque ligne, j'ai le numéro de dossier, nom, prénom, année, période, activité. Ce que je veux c'est uniquement garder les lignes qui apparaissent pour la première fois via le numéro de dossier.

    Voici un code que j'ai bidouillé à partir d'un exemple sur le net mais la deuxième partie ne fonctionne pas car le SQL server me dit que ma syntaxe est inexacte ????

    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
    /* Indicateur 2 : Nombre d'usagers différents */
    drop table Tind2
    Select distinct *
    into Tind2
    from Tind13
     
     
    Select distinct *
    from Tind2 T1
    Where exists (Select *
    				From Tind2 T2
    				Where T1.periode<>T2.periode
    				and T1.NOMNAISSANCE = T2.NOMNAISSANCE
    				and T1.PRENOMNAISSANCE=T2.PRENOMNAISSANCE)
     
    Delete
    From Tind2 T
    Where T.periode < Any (Select periode
    						From Tind2 T2
    						Where T.periode<>T2.periode
    						and T.NOMNAISSANCE = T2.NOMNAISSANCE
    						and T.PRENOMNAISSANCE=T2.PRENOMNAISSANCE)

    Que fais-je de pas correct selon-vous ? Car selon ma compréhension, je pourrais ainsi me créer une table avec uniquement les lignes dont j'ai besoin.

    Merci pour votre aide.

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Eureka !
    J'ai trouvé le bon code :


    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
    /* Indicateur 2 : Nombre d'usagers différents */
    drop table Tind2
    Select distinct noDossier,
    NOMNAISSANCE, 
    PRENOMNAISSANCE, annee, 
    periode
    into Tind2
    from Tind13
     
    Delete
    From Tind2
    Where Tind2.periode > Any (Select periode
    						From Tind2 T2
    						Where Tind2.periode<>T2.periode
    						and Tind2.NOMNAISSANCE = T2.NOMNAISSANCE
    						and Tind2.PRENOMNAISSANCE=T2.PRENOMNAISSANCE
    						and Tind2.noDossier=T2.noDossier
    						and Tind2.annee=T2.annee)
     
    Select * from Tind2
    order by periode
    J'ai donc mes usagers unique pour l'ensemble de la période couverte !

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

Discussions similaires

  1. [XL-2010] Condition : calcul du nombre de jours consécutifs sur une période
    Par willyrod dans le forum Excel
    Réponses: 11
    Dernier message: 20/02/2013, 16h06
  2. Réponses: 4
    Dernier message: 26/02/2010, 11h05
  3. Impression de zones différentes sur plusieurs feuilles
    Par Loki83 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/12/2008, 09h32
  4. Calculer le nombre d'occurence différentes
    Par mfmf99 dans le forum Excel
    Réponses: 6
    Dernier message: 18/01/2008, 10h20
  5. Mon site a un affichage différent sur plusieurs moniteurs,..
    Par midiweb dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/03/2007, 22h08

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