2012-01-19 9 views

risposta

7

vorrei provare qualcosa di simile:

DECLARE @myTable TABLE([Fruits] VARCHAR(20)) 
INSERT INTO @myTable VALUES('Apple') 
INSERT INTO @myTable VALUES('Pear') 
INSERT INTO @myTable VALUES('Peach') 
INSERT INTO @myTable VALUES('Plum') 
INSERT INTO @myTable VALUES('Grape') 

SELECT * 
FROM @myTable 
ORDER BY 
    CASE WHEN([Fruits] = 'Grape') THEN 0 ELSE 1 END, 
    [Fruits] 

Nel ORDER BY, si stanno assegnando un valore quando il campo [Fruits] è Grape in modo da poter ordinare in quella prima, e poi fare una sorta secondario sul [Fruits] campo.

+0

colonne si chiama Fruits. –

+0

Questa soluzione ha il vantaggio di non richiedere una modifica dello schema, ma comporta un maggiore impatto in termini di prestazioni dal momento che è necessario fare più lavoro per ordinarli. – cdeszaq

+1

@aF Grazie, aggiornato la mia risposta. – rsbarro

2

Aggiungi una colonna ordinale alla tabella Frutta e assegna all'uva il numero ordinale più basso (1) e il resto del frutto un valore diverso (2 funzionerebbe bene).

È quindi possibile ordinare dall'ordinale e quindi il nome della frutta. Questo metterà l'Uva in cima e poi il resto in ordine Alpha.

3
select * from myTable 
order by 
    case when Fruits = 'Grape' then 0 else 1 end, 
    Fruits 
Problemi correlati