2010-12-06 4 views
1

Мне нужно выполнить различные виды, в зависимости от значения столбца. Если столбец Ь 1, то следующий запрос:ORDER BY в SQL Server 2005

select * from a 

Если столбец б равен 0, то следующий запрос:

select * from a order by c desc, b 

Как сделать это в одном запросе?

ответ

3
SELECT * INTO #b1 FROM a WHERE b = 1 
SELECT * INTO #b2 FROM a WHERE b = 0 ORDER BY 1 Desc 

SELECT * FROM #b1 

UNION ALL 

SELECT * FROM #b2 

ORDER BY b DESC 

DROP TABLE #b1 
DROP TABLE #b2 
2
ORDER BY 
    CASE WHEN b = 0 THEN C END DESC, 
    CASE WHEN b = 0 THEN b END 
+0

, что запрос сортирует все выделение по c desc, b – Xaver 2010-12-06 10:00:48

+0

, если b = 1 сортируется по нулевому значению, null. т.е. он вообще не сортирует – 2010-12-06 11:06:54

1

Поскольку вы не поставлять критерии порядка для случая Ь = 0 и T-SQL не имеет никакого выражения для физического порядка было бы необходимо использовать динамический SQL здесь. Сначала проверьте, в каком порядке вы хотите найти результаты для b = 0.