Aller au contenu

Change
Bienvenue sur GeekZone
Inscrivez-vous sur GeekZone pour profiter des fonctions avancées du forum, proposer des news, participer aux conversations, ouvrir votre galerie, profiter de la messagerie interne et venir tester nos modérateurs avec du bon troll... Attention, ils ont la gâchette facile. C’est aussi pour ça que GeekZone est le meilleur site de passionnés depuis 2002 ! Si vous avez déjà un compte, connectez-vous - sinon, il est temps d'en créer un.
Photo

[SQL] compteur dans une requête

- - - - -

  • Veuillez vous connecter pour répondre
8 réponses à ce sujet

#1
Gynsu2000

Gynsu2000

    Lord Jedi Geek

  • Membre
  • PipPipPipPip
  • 650 messages
Salut,
voilà un petit description de ma base:
un table contient des commandes, à chaque commande est assigné un numéro de facture (plusieurs commandes peuvent avoir le même numéro de facturation)
Je souhaite avoir une requête me permettant de sortir:
CommandeID,PrixCommande,FactureID,Nr
1001,50,F1,1
1002,78,F1,2
1003,98,F1,3
1004,10,F2,1
1005,65,F2,2
1006,34,F3,1
1007,98,F4,1
1008,58,F4,2

Pas de problème pour les 3 premières colonnes, par contre la dernière je ne vois pas comment faire: c'est en fait un compteur tout con qui s'incrémente à chaque commande d'une facture.
Quelqu'un voit comment faire ça sous SQL Server?
Il y a 3 types de personnes dans le monde, ceux qui savent compter et ceux qui ne savent pas.

#2
phili_b

phili_b

    Yoda Geek

  • Membre
  • PipPipPipPipPipPip
  • 3 420 messages
  • Lieu:Lyon
Inspires toi de cela msdn: How to dynamically number rows in a SELECT Transact-SQL statement

edit: à moins de pouvoir utiliser rank() OVER, si tu as sql server 2005, c'est pas si simple ton problème.

Modifié par phili_b, 14 mars 2007 - 22:21.

Dessin2005Phil110.jpgDessin2005Phil108.jpg

#3
MetalDestroyer

MetalDestroyer

    Senseï Geek

  • Membre
  • PipPipPipPipPip
  • 1 547 messages
Y a une couille dans ton exemple. Si une facture existe déjà dans une commande précédente, tu ne devrais pas aussi incrémenter la valeur dans la première commande qui référencie la facture ?

Ce qui donne ca :
1001, Facture1, 1
1002, Facture2, 2
1003, Facture2, 2
1004, Facture3, 1
Image IPB

#4
phili_b

phili_b

    Yoda Geek

  • Membre
  • PipPipPipPipPipPip
  • 3 420 messages
  • Lieu:Lyon
non non son exemple est très compréhensible et vraisemblable. Il veut un numéro incrémental qui redémarre à chaque nouvelle facture.
Dessin2005Phil110.jpgDessin2005Phil108.jpg

#5
MetalDestroyer

MetalDestroyer

    Senseï Geek

  • Membre
  • PipPipPipPipPip
  • 1 547 messages
S'il veut faire ca, il peut faire une requete qui va relever le nombre de commande où la facture est référencé (SELECT COUNT(maFactureID)). Ou plutot devrais je dire, faire une procédure stockée tout simplement ^^ avec une boucle pour chaque factureID. Et tu fais un update de cette valeur incrémentale sur la table en question.
Image IPB

#6
xentyr

xentyr

    Yoda Geek

  • Membre
  • PipPipPipPipPipPip
  • 2 874 messages
  • Lieu:CZ
A vue de nez, tu aurais un petit :
SELECT CommandeID, PrixCommande, FactureID, rank() over (partition by FactureID order by CommandeID) as Nr
FROM MyTable

Enjoy les fonctions analytiques


OKOK, j'avais pas vu le poste de phili_b ^^

Modifié par xentyr, 15 mars 2007 - 00:41.


#7
elkhansaa

elkhansaa

    Little Geek

  • Membre
  • Pip
  • 1 messages
comment on peut avoir le meme traitement et cela en faisant un update? c a d en stockant cette valeur dans un champ de la meme table
merci

#8
Styx31

Styx31

    Senseï Geek

  • Membre
  • PipPipPipPipPip
  • 1 029 messages
  • Lieu:Toulouse
En utilisant un UPDATE avec jointure, comme expliqué dans cet autre sujet.
C++ is like a watching an old movie you remembered fondly and then finding out that it really sucked - Rick Strahl
When C++ is your hammer, everything starts to look like your thumb - Anon

#9
Gynsu2000

Gynsu2000

    Lord Jedi Geek

  • Membre
  • PipPipPipPip
  • 650 messages
Merci (un peu en retard, j'avoue).
Il y a 3 types de personnes dans le monde, ceux qui savent compter et ceux qui ne savent pas.




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)