2013-04-15 3 views
1
SELECT TOP 1 
     hol_id , 
     CONVERT(VARCHAR(12), hol_date, 112) 
FROM holiday 
WHERE hol_id = 5 
UNION ALL 
SELECT hol_id , 
     CONVERT(VARCHAR(12), hol_date, 112) 
FROM holiday 
WHERE hol_id <> 5 
ORDER BY CONVERT(VARCHAR(12), hol_date, 112) DESC 

Я вижувыберите Объединить все заказ

1 20131218 
5 20131018 
6 20130818 
3 20130405 
4 20130311 
2 20121129 

Я хочу видеть

5 20131018 
1 20131218 
6 20130818 
3 20130405 
4 20130311 
2 20121129 
+0

Можете ли вы объяснить, что заказ вы хотите увидеть? Даты не указаны в хронологическом порядке, например. hol_id 1 - 2013-12-18, который после дат hol_id 5 (2013-10-18) и hol_id 6 (2013-08-18), но вы хотите, чтобы он был заказан между ними? –

ответ

0

Вы должны заказывать по фактической дате (hol_date) не по преобразованного значения VARCHAR.

Предполагая hol_idкакKey column стола (не уверен, почему вы используете TOP 1 здесь), попробуйте этот запрос с ORDER BY CASE, как показано ниже:

SELECT hol_id , 
     CONVERT(VARCHAR(12), hol_date, 112) 
FROM holiday 
ORDER BY CASE WHEN hol_id = 5 
       THEN DATEADD(year,100,getdate()) --Assuming 100 years as max 
       ELSE hol_date 
     END DESC 
+0

thx вы за ответ i Успех. – Harajukuzz

0

Я бы вычислить новое значение для перемещения конкретная запись вверху, как в:

order by 
     case when hol_id = 5 then 0 else 1 end -- Sort hol_id 5 at the top 
    , hol_date desc -- Sort the rest according to date 
+0

thx вы за ответ i Успех. – Harajukuzz

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