2009-12-18 8 views
0

J'ai un rapport SQL piloté par une requête qui le trie dans l'ordre croissant de certaines valeurs numériques. Mais l'utilisateur souhaite que deux rangées de données particulières, qui apparaissent à différentes positions ordinales dans les résultats de la requête, soient juxtaposées. Existe-t-il un moyen de le faire, soit par l'intermédiaire de l'instruction SQL du rapport, soit du fichier .rdl lui-même?Contrôle fin sur ordre de tri SQL

Répondre

3

Il suffit d'ajouter une autre expression calculée comme premier ordre par l'expression, ce qui met ces deux valeurs devant tous les autres ...

Select [Other stuff] 
From Table 
Order By Case colName 
      When first_val then 0 
      When second_val then 0 
      else 1 End, 
     colName 

ou, EDIT (pour inclure @ suggestion de Astander)

Select [Other stuff] 
From Table 
Order By Case 
     When colName In (first_Val, second_Val) 
     Then 0 else 1 End, 
     colName 

et une autre édition, de mettre second_val immédiatement après first_Val ...

Select [Other stuff] 
From Table 
Order By Case 
     When colName < first_Val And colName <> secondVal Then 0 
     When colName = first_Val Then 1 
     When colName = secondVal Then 2 
     Else 3 End, 
     colName 
+2

Vous pouvez raccourcir cela en utilisant ** CAS quand colName IN (first_val, second_val) puis 0 ** –

+0

Je ne savais pas que vous pourriez utiliser CASE dans le contexte de ORDER BY. – JonathanWolfson

+0

@Jonathan, Bien sûr, vous pouvez utiliser Case à peu près partout. @astander, bon ... je n'étais pas sûr que vous pouviez utiliser la syntaxe In (List) dans un Case ... –

0

On dirait que vous vous demandez ceci:

select * from table where col1 = first_val or col1 = second_val;

où first_val et second_val sont les valeurs pour les lignes que l'utilisateur veut renvoyé.

Si ce n'est pas ce que vous cherchez, veuillez clarifier votre question.

-1

également Les CURSEURS sont un bon outil pour un contrôle précis. J'utilise ça, mais je vais voir si on peut enlever le code itératif en utilisant la suggestion ORDER BY CASE.

+1

"CURSOR" est le 'Voldemort' des développeurs de bases de données .... –