Précédent   Forum du club des développeurs et IT Pro > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/12/2012, 11h32   #1
VinceSSJ
Candidat au titre de Membre du Club
 
Homme
Inscription : mai 2011
Messages : 137
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 137
Points : 13
Points : 13
Par défaut Requête incrémentale avec tests

Bonjour,

je suis devant une difficulté que je vais essayer de détailler le plus possible.

J'ai une vue (que je vais appeler v1) dans laquelle je pioche des données dans une autre vue (v2) et des tables.

Je récupère les données (int) d'une colonne dans une de ces tables.
Les valeurs de cette colonne n'apparaissent qu'une seule fois pour chaque donnée de la vue v2 que je récupère, SAUF pour une valeur (toujours la même, 50) qui apparait plusieurs fois pour la même donnée de v2.
Je voudrais donc que cette valeur s'incrémente d'elle même en fonction du nombre de fois où elle apparait pour la même valeur de v2.

Par exemple :

v2_Num :
10
20
30
40
50
60


valeurTableY:
13
14
15
16
17
17
17
18


Je voudrais avoir, dans v1 :
13 10
14 20
15 30
16 40
17 50
17 51
17 52
18 60


J'essaye de faire ça avec des COUNT(DISTINCT) via une vue intermédiaire, le problème est que ça m'affecte toutes les valeurs du coup....
Est-il possible de faire tous les tests nécessaire avec 1 seule requête ou je dois passer par une procédure ?

Merci !
VinceSSJ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 11h42   #2
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 936
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 936
Points : 11 922
Points : 11 922
Je ne comprends déjà pas comment tu associes v2_Num et valeurTableY...

à trop simplifier ton besoin, tu as oublié des informations indispensables !

Relis un peu les Règles du forum Langage SQL à lire par tous
__________________
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 12h06   #3
VinceSSJ
Candidat au titre de Membre du Club
 
Homme
Inscription : mai 2011
Messages : 137
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 137
Points : 13
Points : 13
Autant pour moi

Je vais essayer de mieux détailler tout en restant compréhensible.
Bon déjà je suis sous SQL Server 2008

J'ai 3 tables (faux-noms) :
- TypeVisite (id: TypeVisite_cle)
- Visite (id: Visit_cle). Une visite possède un TypeVisite.
- Personne (id: Personne_cle). Une Personne possède une Visite.

et une vue :
- InfosPersonne qui regroupe plein d'infos et possède Personne_cle

Chaque Visite doit être unique à chaque patient, sauf la Visite de TypeVisite n°50 qui peut apparaitre plusieurs fois.
Un TypeVisite a donc une colonne numVisite et une Visite a une colonne dateVisite.

Mon objectif est de créer une vue regroupant notammant chaque patient et les visites qu'il a effectué.
Le problème est que, dans ma vue, le numéro 50 apparait plusieurs fois et la personne qui va importer ma vue veut absolument la visite 50 sous la forme 51,52,53,54 ... dans l'ordre où elle les a effectué...

J'ai donc essayé via une vue intermédiaire mais je sais pas comment m'y prendre pour que seule la visite de typevisite 50 soit affectée
De plus je ne veux pas de group by direct vu que je veux que toutes mes visites soient affichées...

Est ce que c'est un peu plus compréhensible comme ça ?
VinceSSJ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 12h48   #4
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 936
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 936
Points : 11 922
Points : 11 922
Dois-je en déduire que Visite est la table d'association entre Personne et TypeVisite, avec pour clé composée (Personne_Cle, TypeVisite_Cle, Date_Visite) ?
Code :
1
2
3
4
5
6
7
SELECT  Personne_Cle
    ,   TypeVisite_Cle + RANK() OVER (PARTITION BY Personne_Cle, TypeVisite_Cle ORDER BY Date_Visite) - 1
FROM    Visite
ORDER BY Personne_Cle
    ,   TypeVisite_Cle
    ,   Date_Visite
;
__________________
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 17h14   #5
VinceSSJ
Candidat au titre de Membre du Club
 
Homme
Inscription : mai 2011
Messages : 137
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 137
Points : 13
Points : 13
C'est à peu près ça, j'ai repris le rank over dans mon schéma exact et c'est ce qu'il me fallait !!!!
Je n'y avais pas du tout penser j'y penserai à l'avenir

Merci !
VinceSSJ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h09.


 
 
 
 
Partenaires

Hébergement Web