2017-06-14 1 views
0

j'ai une requête dynamique avec un tri dynamique sur le filtre à temps qui permettrait de créer un ordre de tri décroissant des articles produits par valeur dans la plupart des cas, est le prévu .:TSQL commande dynamique des valeurs

ROW_NUMBER() OVER (PARTITION BY T.Time_Calculation ORDER BY SUM(T.[Displayed Value 1]) DESC) +2 end AS DisplayItem_SortOrder 

Maintenant le catch: J'ai un type de dataset (défini par un champ dans la clause WHERE) où les nombres négatifs viennent aussi, et dans ce cas je dois passer des valeurs de type float positives les plus élevées.

Le ABS() ne résout pas cela parce que certains nombres positifs apparaissent au milieu. J'ai essayé d'ajouter une instruction CASE mais il semble que "ASC" et "DESC" ne sont pas quelque chose que l'on peut ajouter à l'intérieur. Toutes les suggestions seraient appréciées.

Display Name DisplayItem_SortOrder Displayed Value 1 
Product1 3 -31454.61396 
Product10 4 -3407.16712 
Product2 5 -708.9942251 
Product3 6 123.5454381 
Product6 7 428.6027531 
Product5 8 454.4814295 
Product4 9 454.9838374 
Product9 10 455.54 
Product8 11 471.54 
+0

Avez-vous essayé avec le CASE dans le ORDER BY? Vous devriez être capable de trier avec ASC et DESC de cette façon. –

+2

L'ASC normal ne commence-t-il pas par le nombre le plus bas (AKA le plus négatif) par le nombre le plus élevé (le plus haut positif)? Vous ne devriez même pas avoir besoin de spécifier ASC ou DESC –

+0

Les données que vous avez publiées semblent être triées par ordre croissant, n'est-ce pas suffisant? Ou voulez-vous -708.994 ... être la première valeur, et après cela -3407.167 ...? –

Répondre

4

Je pense que vous cherchez quelque chose comme ceci:

Créer et remplir les données d'échantillons (S'il vous plaît nous sauver cette étape dans vos futures des questions)

DECLARE @T AS Table 
(
    col int 
) 

INSERT INTO @T VALUES 
(1), (2), (3), (4), (-1), (-2), (-3), (5) 

La requête:

SELECT col 
FROM @T 
ORDER BY CASE WHEN col < 0 THEN 0 ELSE 1 END, 
     ABS(col) 

Résultats:

col 
-1 
-2 
-3 
1 
2 
3 
4 
5