Je fais une SELECT
à partir de plusieurs tables, mais je veux d'abord ORDER BY
un set de critères. Voici un exemple de l' SELECT
:
SELECT a.ItemName, a.ItemDescription, a.ItemPrice, a.DateAdded, a.UserID, u.UserType FROM table a inner join user u ON u.UserID = a.UserID UNION SELECT b.ItemName, b.ItemDescription, b.ItemPrice, b.DateAdded, b.UserID, u.UserType FROM table b inner join user u ON u.UserID = b.UserID UNION SELECT c.ItemName, c.ItemDescription, c.ItemPrice, c.DateAdded, c.UserID, u.UserType FROM table c inner join user u ON u.UserID = c.UserID
À partir du jeu de résultats ci-dessus, je voudrais d'abord ORDER BY where u.UserType = 'Consultant' and DateAdded DESC, and then by u.UserType = 'Internal' and Price DESC and DateAdded DESC
.
Comment pourrais-je forcer le sorting de la manière ci-dessus?
Vous pouvez le faire en utilisant le case
Order by case when u.UserType = 'Consultant' then 1 else 0 end, DateAdded desc, case when u.UserType = 'Internal' then 1 else 0 end, Price desc, DateAdded desc
Sans données DDL et Sample à tester, c'est un peu une supposition, mais peut-être …
ORDER BY CASE UserType WHEN 'Consultant' THEN 1 END DESC, DateAdded DESC, CASE UserType WHEN 'Internal' THEN 1 END DESC, Price DESC, DateAdded DESC;
Modifier, lors de la relecture, je ne suis pas tout à fait sûr que c'est ce que veut le PO. L'échantillon et la sortie attendue seraient utiles si moi et Magnus sont incorrects.
Première command par un consultant ou non. Ensuite, commandz par prix (mais pas pour les consultants, donc pour eux order par un pseudo prix constant). Ensuite, commandz par date ajoutée.
order by case when usertype = 'Consultant' then 1 else 2 end, case when usertype = 'Consultant' then 0 else price end desc, dateadded desc;
Cela a d'abord les consultants (classés par date ajoutée), suivi de tous les autres (classés par prix et date ajoutée).
S'il existe plus de types d'users que les deux que vous avez mentionnés et que vous voulez d'abord des consultants, puis des internes, puis d'autres, vous devrez modifier la première command line en conséquence:
order by case usertype when 'Consultant' then 1 when 'Internal' then 2 else 3 end, case when usertype = 'Consultant' then 0 else price end desc, dateadded desc;