générer incrémenter le numéro dans l'instruction select à l'aide de SQL server
J'ai une table nommée table1 dans SQL server comme suit:
colA
-------
A123
Z123
C123
B123
maintenant je veux utiliser une instruction SQL pour obtenir le résultat comme suit:
ID colA
--------
1 A123
2 Z123
3 C123
4 B123
L'ordre de colA est de l'ordre de la ligne dans la table. N'avez pas besoin de faire le tri.
comment faire??
Merci beaucoup
L'ordre des lignes sont renvoyées à partir d'une table dans SQL sont aléatoires, sauf si vous utilisez une clause ORDER BY.
OriginalL'auteur Eric Cheung | 2013-10-18
Vous devez vous connecter pour publier un commentaire.
Voici ce que je fais toujours quand j'ai besoin d'une incrémentation ID sans trier les données (parce que mes autres ou les lignes ne sont ni alphabétique, ni chronologique). Aussi, je méprise l'aide de tables temporaires, sauf s'ils sont absolument nécessaires.
Vous voulez dire que vous pensez GETDATE() est réévalué à chaque ligne? Même si c'était le cas, que si la requête a retourné 1000 lignes de 20 ms? Considérez-vous les numéros de ligne fiable (comme dans "correspondant à l'ordre dans lequel elles ont été renvoyés en fonction GETDATE()"), en particulier compte tenu du fait que GETDATE renvoie une
datetime
dont la granularité est de 3 ms?Le
DATEPART
chose est inutile.GETDATE
traité comme une constante d'exécution de sorte que la requête ne voit qu'une seule valeur. Un sensORDER BY
pourROW_NUMBER
est plus communément écritOVER (ORDER BY (SELECT NULL))
.Eh bien, les gars, vous êtes de droite. Je suis plutôt nouveau à cela, comme vous pouvez l'avoir compris. J'ai modifié ma réponse à l'aide de l'entrée de @paul-blanc
OriginalL'auteur omikes
Exemple à l'aide de la fonction ROW_NUMBER
OriginalL'auteur PJM
Essayez ceci à l'aide d'un
Table variable with an Identity column
.Violon de démonstration:
résultats:
Oui, OP dit, il n'a pas besoin d'ordre. Si colA est a un index cluster, cela donnera le même résultat (sauf si les lignes sont supprimées).
Je ne pense pas qu'un index cluster affecte l'ordre les résultats sont renvoyés juste la façon dont ils sont stockés.
Dans sql server, lorsque vous créez une colonne de clé, il ajoute un
clustered index
automatiquement, ce quidecides the physical order
des lignes de cette table et c'est la raison pour laquelle vous ne pouvez avoir qu'un index cluster par table.SQL Server n'a pas de garantie qu'un
SELECT
sur une table avec un index cluster renvoie les résultats clés de l'index cluster commande. Même si le plan montre un scan CI niveau d'Isolation de Transaction, SQL Server Edition et le Degré de Parallélisme tous pourrait signifier que les résultats ne sont pas dans l'ordre.OriginalL'auteur Kaf
Générer un numéro de Ligne dynamique lorsque les conditions de l'ordonnance sont présents
OriginalL'auteur Arun Prasad E S