4 votes

Différences entre les tris Excel et SQL

Programmes utilisés :

SQL Server 2000, Excel 2003

Notre base de données comporte un tableau intitulé "Échantillons". En utilisant la requête suivante...

SELECT [Sample], [Flag] FROM Samples
ORDER BY [Sample]

... nous obtenons les résultats suivants :

 Sample    Flag
----------   ----
12-ABC-345      1
123-45-AB       0
679-ADC-12      1

Lorsque l'utilisateur dispose des mêmes données dans une feuille de calcul Excel et qu'il effectue un tri dans la colonne Échantillon, il obtient l'ordre de tri suivant :

 Sample    Flag
----------   ----
123-45-AB       0
12-ABC-345      1
679-ADC-12      1

Par curiosité, pourquoi y a-t-il une différence entre le tri dans SQL et Excel (autre que "parce que c'est Microsoft").

Existe-t-il un moyen, en SQL, de trier sur la colonne Échantillon de la même manière que dans Excel, ou vice versa ?

8voto

Adam Robinson Points 88472

Le tri du serveur SQL est déterminé par la collation de la base de données, de la table ou du champ. Par défaut, il s'agit d'un tri lexicographique standard (le code de caractère pour le trait d'union est numériquement inférieur au code de caractère pour 1). Malheureusement, selon ce lien Microsoft , Excel ignore les traits d'union et les apostrophes lors du tri sauf en cas d'égalité des voix. Il n'y a pas de collation qui fasse cela spécifiquement (à ma connaissance), vous devrez donc faire semblant.

Pour obtenir le même résultat dans le serveur SQL, vous devez procéder comme suit :

SELECT [Sample], [Flag] FROM Samples
ORDER BY REPLACE(REPLACE([Sample], '-', ''), '''', ''), 
    (CASE WHEN CHARINDEX([Sample], '-') > 0 THEN 1 ELSE 0 END) + 
    (CASE WHEN CHARINDEX([Sample], '''') > 0 THEN 1 ELSE 0 END) ASC

Cette méthode permet de classer les résultats en fonction de la chaîne de caractères, comme si tous les traits d'union et les apostrophes avaient été supprimés, puis de classer les résultats en fonction d'une valeur calculée qui produira le résultat suivant 1 pour toute valeur contenant un trait d'union ou une apostrophe, ou 2 pour toute valeur contenant les deux (et 0 pour une valeur qui ne contient ni l'un ni l'autre). Cette expression fera en sorte que toute valeur contenant un trait d'union et/ou une apostrophe soit triée après une expression équivalente, comme dans Excel.

3voto

Diego Points 2077

Personnellement, je considère que l'ordre de tri de SQL Server est correct et j'interviendrais sur Excel, car c'est lui qui suit une méthode "inhabituelle" (du moins, d'après mon expérience).

Voici une explication de la manière dont Excel trie les données alphanumériques, et comment y remédier : Comment trier correctement des données alphanumériques dans Excel ? .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X