2014-10-16 4 views
-4

В настоящее время в таблицах я есть данные нижеORDER BY в SQL Server 2008

 
SORT | QUESTION_SORT 
---------------------------------------------------------- 
1 | 0 
2 | 0 
3 | 0 
4 | 0 
5 | 1 
5 | 2 
5 | 3  
6 | 1 
6 | 2 
6 | 3 
7 | 1 
7 | 2 
7 | 3 
8 | 1 
8 | 2 
9 | 0 
10 | 0 

Я хочу Выход отформатированный, как показано ниже на основании следующих критериев:

Я хочу применять сортировку по колонке SORT всегда

1), если столбец QUESTION_SORT значение 0 затем выполнить только сортировка

2), если столбец QUESTION_SORT значение ненулевой затем выполнить сортировку с GROUP BY из QUESTION_SORT

 
SORT | QUESTION_SORT 
---------------------------------------------------------- 
1 | 0 
2 | 0 
3 | 0 
4 | 0 
5 | 1 
6 | 1 
7 | 1 
8 | 1 
5 | 2 
6 | 2 
7 | 2 
8 | 2 
5 | 3  
6 | 3 
7 | 3 
9 | 0 
10 | 0 

EDIT:

Я попробовал решение, предложенное Lamak но оно пропускает записи, которые имеют значение 2 или 3 как QUESTION_SORT,

Запрос:

Declare @TmpQuest table (Sort int , QUESTION_SORT int) 
insert into @TmpQuest values (1 , 0) 
insert into @TmpQuest values (2 , 0) 
insert into @TmpQuest values (3 , 0) 
insert into @TmpQuest values (4 , 0) 
insert into @TmpQuest values (5 , 1) 
insert into @TmpQuest values (5 , 2) 
insert into @TmpQuest values (5 , 3) 
insert into @TmpQuest values (6 , 1) 
insert into @TmpQuest values (6 , 2) 
insert into @TmpQuest values (6 , 3) 
insert into @TmpQuest values (7 , 1) 
insert into @TmpQuest values (7 , 2) 
insert into @TmpQuest values (7 , 3) 
insert into @TmpQuest values (8 , 1) 
insert into @TmpQuest values (8 , 2) 
insert into @TmpQuest values (9 , 0) 
insert into @TmpQuest values (10 , 0) 

SELECT 
    [Sort], MIN(QUESTION_SORT) QUESTION_SORT 
FROM @TmpQuest 
GROUP BY [SORT] 

Выход:

Sort QUESTION_SORT 

1 0 
2 0 
3 0 
4 0 
5 1 
6 1 
7 1 
8 1 
9 0 
10 0 
+5

Пытались ли вы что-нибудь? – Lamak

+0

@Mihai Это не собирается ставить 9 и 10 в конце. –

+2

Какие критерии у вас есть для желаемого порядка сортировки? –

ответ

2

некоторые, как я смог решить мой вопрос, как на мой Требуется выход, а также изменить запрос в Sql Fiddle, чтобы получить желаемый результат: Sql fiddle query

Запрос:

SELECT sort, 
     question_sort, 
     (SELECT Min(TMP1.sort) + (tmpquest.question_sort * 0.005) 
     FROM tmpquest TMP1 
     WHERE Tmp1.question_sort = tmpquest.question_sort 
     GROUP BY TMP1.question_sort) AS MinValByGrp 
FROM tmpquest 
ORDER BY CASE 
      WHEN question_sort = 0 THEN sort 
      ELSE minvalbygrp 
      END, 
      sort 

ВЫВОД:

SORT QUESTION_SORT 
1   0 
2   0 
3   0 
4   0   
6   1 
7   1 
8   1 
5   2 
6   2 
7   2 
8   2 
5   3 
6   3 
7   3 
9   0 
10  0 
Смежные вопросы