2010-12-06 4 views
1

Je dois effectuer plusieurs sortes, en fonction de la valeur de la colonne. Si la colonne b est 1, alors la requête suivante:ORDER BY dans SQL Server 2005

select * from a 

Si la colonne b est 0, la requête suivante:

select * from a order by c desc, b 

Comment faire en une seule requête?

Répondre

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 
+0

ergoter très mineur puisque les tables et les colonnes sont évidemment fausses, mais les clauses De devraient être 'FROM a' –

+0

Merci conrad je les ai corrigées ;-) – Rob

+0

cette requête trier toute la sélection par c desc, b – Xaver

2
ORDER BY 
    CASE WHEN b = 0 THEN C END DESC, 
    CASE WHEN b = 0 THEN b END 
+0

cette requête trier toute la sélection par c desc, b – Xaver

+0

si b = 1 il trie par null, null. c.-à-d. il ne trie pas du tout –

1

Puisque vous n'avez pas fourni un critère d'ordre pour le cas b = 0 et T-SQL n'a pas d'expression de l'ordre physique, il serait nécessaire d'utiliser SQL dynamique ici. Veuillez d'abord vérifier dans quel ordre vous voulez que les résultats pour b = 0.