begin process at 2012 05 26 12:36:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

DB2

 > 

Requêtes

 > 

Compter enregistrements dans un SELECT selon conditions


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Compter enregistrements dans un SELECT selon conditions

mardi 30 décembre 2008 à 11:10:01 | Compter enregistrements dans un SELECT selon conditions

thescientist59

Bonjour à tous!

Je suis exposé à un problème et j'espère que vous pourrez m'aider!
D'avance, merci à ceux qui lisent ce message et y répondront!

Je fais une extraction de données à partir d'une BDD DB2, avec par exemple :

IDPERSONNE;IDFAMILLE;NOM;PRENOM;CATEGORIE

1;1;DUPONT;DAVID;PERE
2;1;DUPONT;MARIE;MERE
3;1;DUPONT;THOM;ENFANT
4;1;DUPONT;MARC;ENFANT
5;1;DUPONT;JEAN;ENFANT

6;2;DUPOND;JULIEN;PERE
7;2;DUPOND;LAURE;MERE
8;2;DUPOND;GERALD;ENFANT
9;2;DUPOND;FRED;ENFANT


Je voudrai attribuer un numéro pour les enfants de chaque famille, de la sorte :

1;1;DUPONT;DAVID;PERE
2;1;DUPONT;MARIE;MERE
3;1;DUPONT;THOM;ENFANT;1
4;1;DUPONT;MARC;ENFANT;2
5;1;DUPONT;JEAN;ENFANT;3

6;2;DUPOND;JULIEN;PERE
7;2;DUPOND;LAURE;MERE
8;2;DUPOND;GERALD;ENFANT;1
9;2;DUPOND;FRED;ENFANT;2


Vous l'aurez compris, je voudrai incrémenter de 1 chaque enfant d'une famille.
Pour le moment, j'arrive à retourner 1 pour chaque enfant.

Voici ma requête (pour les deux familles concernées) :

SELECT per.per_id, per.per_fam, per.per_nom, per.per_prm, prt.prt_cat, sum(CASE prt.prt_cat when 'ENFANT' then '1' else '0' end) as test
FROM PER
JOIN PRT ON PRT.PER_NO = PRT.PER_ID
WHERE per.per_fam IN ('1','2')
GROUP BY per.per_id, per.per_fam, per.per_nom, per.per_prm

avec pour résultat :

ID;FAMILLE;NOM;PRENOM;CATEGORIE;TEST

1;1;DUPONT;DAVID;PERE;0
2;1;DUPONT;MARIE;MERE;0
3;1;DUPONT;THOM;ENFANT;1
4;1;DUPONT;MARC;ENFANT;1
5;1;DUPONT;JEAN;ENFANT;1

6;2;DUPOND;JULIEN;PERE;0
7;2;DUPOND;LAURE;MERE;0
8;2;DUPOND;GERALD;ENFANT;1
9;2;DUPOND;FRED;ENFANT;1

J'arrive à faire retourner la valeur 1 pour chaque enfant (avec le CASE) mais pas à l'incrémenter...
Je n'ai pas d'idée pour y parvenir, d'où mon post...!

Je vous remercie d'avance!
J'ai essayé beaucoup de fonctions, mais en vain!!

Stéphane
mercredi 31 décembre 2008 à 21:36:46 | Re : Compter enregistrements dans un SELECT selon conditions

nhervagault

Administrateur CodeS-SourceS
Salut,

Je ne connais pas DB2, mais je vais tenter de repondre.

Ton probleme n'est pas fait pour etre repondu en SQL
car SQL est ensembliste et par definition non ordonné
donc impossible de dire que l'enfant 1 aura le numero 1

Il est peut etre possible de passer par un rank ou une histoire du genre
et encore la numerotation de sous ensemble, je ne vois pas trop comment le faire.

Sinon il y a en denrier recours la création de procédure stockée.

http://www.devx.com/getHelpOn/10MinuteSolution/16573/1954

Il y a peut etre la reponse dans ce lien.
Mais j'ai pas pris le temps d'analyser les requetes n'ayant pas DB2.

Bon sql
mercredi 21 janvier 2009 à 21:09:10 | Re : Compter enregistrements dans un SELECT selon conditions

EricSQL

Comme ceci peut être : Select IdPersonne , F.IdFamille , Nom , Prenom , Categorie , case Categorie when 'ENFANT' then IdPersonne - minID + 1 else NULL end From FAMILLE F left outer join ( Select IdFamille, min(IdPersonne) as minId From FAMILLE Where Categorie = 'ENFANT' Group by IdFamille ) M on F.IdFamille = M.IdFamille Order by IdPersonne ;

/Eric


Cette discussion est classée dans : enfant, dupont, prt, per, dupond


Répondre à ce message

Sujets en rapport avec ce message

Tri, comment??? [ par Fildomen ] Salut j'ai par exemple une table ou sont stocké des gens avec leur id (TGens), et une autre qui contient les noms de leur enfant (TEnfants)  (id du pè Requete de Requette de Requette [ par moldov ] Bonjour, je voudrias savoir si c'est possible de faire une requette et de refaire la meme requette sur les resultats de la requette précendente et ain Utilisateurs MySQL [ par vbguigui ] Bonjour,Quelle est la requete que je dois utilier pour ajouter un utilisateur mysql comme j'ai fait ici : GRANT <SPAN syntax_alpha_reservedWord? FOR XML EXPLICIT..... Lyrics?! [ par Omerdude ] Bonjour, Je suis en train de travailler sur une requête, et vu que c'est pas du tout mon truc à la base, j'ai un peu de mal... Explication: J'ai une B Problème de date [ par gregorybts ] Bonjour,JE cherche à ajouter une contrainte sur cette requête, j'aimerai n'obtenir que les factures datant de plus d'un mois.Le problème c'est que déj Procedure SQL sous oracle de comparaison ligne par ligne de 2 tables [ par lightzeus ] B requete selection :parents +1seul enfant [ par G4uthier ] Bonjour, J'ai ma requete : Code : SELECT sm_image.img, sm_properties.postcode, sm_properties.address2, sm_properties.address3 FROM sm_image, sm_pro Recherche d'un ID maximun sous SQL dans des requètes liées [ par usfoot ] Bonjour à tous,Je débute sous SQL et souhaite créer une requète avec des tables liées qui me donne un seul ID par personne.J'ai des personnes qui sais java_oracle [ par aamsa ] bonjour a tous est ce que quelqu un peut m aider a propos oracle et java, voila mon probleme:j ai une procedure stochee voila son code: create or repl duplication des lignes d'une table en fonction d'une valeur [ par ple2415 ] Bonjour à tous,je souhaiterais dupliquer les lignes d'une table en fonction de la valeur contenue dans un des champs de cette table.exemple d'une lign


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,201 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales