2011-08-27 3 views
0

Voici ...SÉLECTEURS MULTIPLES - MÊME TABLEAU

J'ai 5 enregistrements dans un tableau intitulé MyTable avec un seul champ appelé Se. Les 5 dossiers contiennent les valeurs suivantes (1-5):

se=1 se=2 se=3 se=4 se=5 

Je veux avoir les dossiers retournés à moi comme suit:

SELECT * FROM MyTable WHERE se >= 3 
UNION 
SELECT * FROM MyTable WHERE se < 3 
ORDER BY se ASC 

Mon objectif est d'obtenir des documents retournés comme:

3,4,5,1 2

mais naturellement je reçois ...

1,2,3,4,5

Pouvez-vous m'aider? Le serveur MSSQL peut-il faire cela?

Merci d'avance pour toute assistance.

Répondre

1

Si vous êtes à la recherche d'un hack pour ce scénario spécifique:

SELECT * FROM MyTable ORDER BY (se + 2) % 5 

Exemple sur PostgreSQL:

$ WITH MyTable(se) AS (VALUES 
$  (1), (2), (3), (4), (5) 
$) 
$ SELECT * FROM MyTable ORDER BY (se + 2) % 5; 
se 
---- 
    3 
    4 
    5 
    1 
    2 
(5 rows) 
5

Essayez cette

SELECT 1, * FROM MyTable WHERE se >= 3 
UNION ALL 
SELECT 2, * FROM MyTable WHERE se < 3 
ORDER BY 1, se ASC 
+0

+1 Cela fonctionne sur PostgreSQL. Idée brillante. – cdhowie

+0

PARFAIT --- CECI FONCTIONNE! Merci beaucoup. –

+0

si cela fonctionne s'il vous plaît marquer cette réponse a la bonne. – Chris

3

Vous pouvez utiliser un sélection unique et une condition dans le tri:

select * 
from MyTable 
order by (case when se >= 3 then 0 else 1 end), se 

(Les parenthèses autour du cas ne sont pas nécessaires, je les ajoutais pour rendre le code plus clair.)

Questions connexes