2009-12-18 3 views
0

У меня есть SQL-отчет, управляемый запросом, который сортирует его в порядке возрастания некоторого числового значения. Но пользователь хочет, чтобы две конкретные строки данных, которые появляются в разных порядковых позициях в результатах запроса, были сопоставлены. Есть ли способ сделать это, будь то во время запуска SQL или самого файла .rdl?Точный контроль над SQL Сортировка

ответ

3

Просто добавьте еще вычисленного выражения в качестве первого порядка по экспрессии, что ставит эти два значения впереди всех ...

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

или EDIT (чтобы включить @ предложение astander в)

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

и другой Edit, немедленно положить second_val после 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

Вы можете сократить это с помощью ** CASE WHEN colName IN (first_val, second_val), затем 0 ** –

+0

Я не знал, что вы можете использовать CASE в контексте ORDER BY. – JonathanWolfson

+0

@ Джонатан, конечно, вы можете использовать Кейс где угодно. @astander, хороший. Я не был уверен, что вы можете использовать синтаксис In (List) внутри футляра ... –

0

Похоже, что вы просите за это:

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

где first_val и second_val являются значения для строк, которые пользователь хочет вернувшихся.

Если это не то, что вы ищете, уточните ваш вопрос.

-1

Также , КУРСОР - хороший инструмент для мелкозернистого контроля. Я использую это, но я увижу, можно ли его удалить из итеративного кода, используя предложение ORDER BY CASE.

+1

«CURSOR» - это «Волдеморт» разработчиков баз данных .... –

Смежные вопросы