Ajouer une Colonne ID juste avec le SELECT

Ajouer une Colonne ID juste avec le SELECT - SQL/NoSQL - Programmation

Marsh Posté le 13-11-2006 à 12:13:45    

Bonjour la compagnie :hello:
 
J'aimerais a travers une requête de SELECTION ajouter un élement ID virtuel.
 
En gros genre :
 
Select @i, Nom
FROM TABLE
@i = @i + 1
 
Sa me permettrais en fait de classer mes resultats par ordre, ce qui permet par exemple de créer un classement de concours .
 
Merci d'avance :jap:


---------------
Je vous préviens, je suis une merde en orthographe, vous me parlé à vos risques et périls !
Reply

Marsh Posté le 13-11-2006 à 12:13:45   

Reply

Marsh Posté le 13-11-2006 à 12:17:00    

pourquoi tu ne cree pas une 'vraie' colonne id en autoincrement ?

Reply

Marsh Posté le 13-11-2006 à 12:18:25    

Car je n'ai pas les droit sur la table qu'on me fournit a part la lecture ;)
 
Et meme si c'etais le cas, ca ne sert a rien vu que je veut l'id dans un ordre particulier, dans l'ordre de mon select
 
Donc en gros si je change le ORDER BY bah les ID doivent toujours commencé a 1


Message édité par hassbak le 13-11-2006 à 12:19:05

---------------
Je vous préviens, je suis une merde en orthographe, vous me parlé à vos risques et périls !
Reply

Marsh Posté le 13-11-2006 à 15:47:37    

Sa parait tellement évident, mais pas si facile a réaliser :(


---------------
Je vous préviens, je suis une merde en orthographe, vous me parlé à vos risques et périls !
Reply

Marsh Posté le 13-11-2006 à 16:07:40    

quel sgbd ?

Reply

Marsh Posté le 13-11-2006 à 16:53:51    

Sql Server :)


---------------
Je vous préviens, je suis une merde en orthographe, vous me parlé à vos risques et périls !
Reply

Marsh Posté le 13-11-2006 à 17:25:32    

raté :D
 
avec oracle t'as rownum, mais y'a pas d'équivalent dans sql server.
 
cependant, avec une fonction analytique, doit y avoir moyen... regarde du côté de "sumby" ou chais plus quoi (qui permet de faire des somme progressives lignes par ligne... si tu sommes sur une constante 1, alors tu devrais pouvoir te faire un compteur)


Message édité par MagicBuzz le 13-11-2006 à 17:35:02
Reply

Marsh Posté le 13-11-2006 à 17:33:01    

Arf, encore mieux.
 
SQL Server 2005 a une fonction "row_number()" :
 

Code :
  1. select top 3 row_number() over (order by dte.dte desc), dte.dte
  2. from dte
  3. order by dte.dte desc


 
(par contre je trouve pas les fonctions analytiques :D)

Reply

Marsh Posté le 13-11-2006 à 17:34:45    

à noter que pour ton cas, "RANK()" peut être substitué à "ROW_NUMBER()" sans problème.
 
à tester. à priori, le RANK() permettra de gérer les ex-equo

Reply

Marsh Posté le 13-11-2006 à 17:46:55    

J'ai trouvé une autre méthode grace a ton intervention MAGICbUZZ
 
 SELECT   identity(int, 1,1) as id, Nom, Montant,Site, Junior
 into    #temp  
 FROM DEFI_CONTRAT
 order by Montant desc
 
 select * from
 #temp


---------------
Je vous préviens, je suis une merde en orthographe, vous me parlé à vos risques et périls !
Reply

Marsh Posté le 13-11-2006 à 17:46:55   

Reply

Marsh Posté le 13-11-2006 à 19:06:30    

euh... si t'as la version 2005, utilise plutôt une des fonctions que je t'ai indiqué, parceque c'est pas top de passer par une table temporaire

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed