2017-07-06 1 views
0

J'ai une table dans SQL Server qui contient une colonne de tri d'entiers. Toutes les valeurs dans la colonne sont positives. Je veux trier la table de telle sorte que j'ai choisi une valeur "max" (comme 3) et toutes les valeurs sont retournées décroissantes par rapport à 3. L'ordre "descendant" importe peu tant que chaque élément de la base de données est listé .OrderBy dans SQL Server avec l'entier "max" personnalisé

exemple de base de données:

Value SortColumn 
A  1 
B  5 
C  4 
D  3 
E  0 
F  2 

sortie désirée (avec 3 comme "max"):

Value SortColumn 
D  3 
C  4 
B  5 
E  0 
A  1 
F  2 

Il semble que ce similar post peut-être dans la bonne direction, mais ce n'est pas tout à fait ce que je veulent ....

Répondre

1

Je pense que vous voulez:

order by abs(sortcolumn - 3) asc 
1

Vous pouvez utiliser une expression CASE:

SELECT 
    Value, SortColumn 
FROM yourTable 
ORDER BY 
    CASE WHEN SortColumn = 3 THEN 0 ELSE 1 END, 
    SortColumn DESC 
0

J'ai solution testée par Tim et Gordon, mais le résultat ne correspond pas à ce que vous voulez.

Ma solution est cependant très longue. un coup d'oeil:

DECLARE @table TABLE (Value CHAR,SortColumn INT) 
INSERT INTO @table VALUES ('A',1),('B',5),('C',4),('D',3),('E',0),('F',2) 

DECLARE @max INT=3; 

;WITH CTE AS(
SELECT 1-ROW_NUMBER() OVER (ORDER BY SortColumn DESC) RN, * FROM @table WHERE SortColumn >[email protected] 
UNION 
SELECT ROW_NUMBER() OVER (ORDER BY SortColumn) RN,* FROM @table WHERE SortColumn <@max 
) 
SELECT Value,SortColumn FROM CTE ORDER BY RN 

et la sortie est:

enter image description here

0

Vous voulez trier les nombres supérieurs à trois croissant et les nombres inférieurs à 3 croissant. Alors faites ceci:

SELECT 
    -- blah 
ORDER BY CASE WHEN SortColumn >= 3 THEN 1 ELSE 0 DESC, SortColumn ASC