/ / SQL Server Query - Plusieurs commandes par colonne et par même regroupement - sql, sql-server, sql-server-2008, tsql

Requête SQL Server - Ordre multiple par colonne et par même groupe - sql, sql-server, sql-server-2008, tsql

Exemple de table

entrer la description de l'image ici

Je dois trier l'enregistrement ci-dessus par REMARKS par ordre croissant, puis par FIRSTDATE par ordre décroissant, puis par LASTDATE par ordre décroissant

Je fais cette requête

select * from tblRecord
order by Remarks, FirstDate desc, Lastdate desc

Et me donne cette sortie

entrer la description de l'image ici

Cela devrait être comme ça:

entrer la description de l'image ici

Actualisé: Startdate et Enddate se référer à la date de début réelle et à la dernière datefonctionnement des locataires, ce que je veux, c'est de séparer le tri du locataire par remarques, une fois arrêté, le tri doit être basé sur la première date dans l'ordre décroissant, lorsqu'il est démarré, doit être par date de fin dans l'ordre décroissant.

Réponses:

1 pour la réponse № 1

Je ne sais pas ce que vous cherchez à voirvous ne répondez pas pour le moment, j'ai 2 situations dans lesquelles je peux obtenir le résultat que vous recherchez, 1 d'entre elles sera certainement erronée ou les deux pourraient être erronées mais elles produisent toutes les deux le résultat que vous recherchez avec le données de test que vous avez fournies

Situation 1: Vous devez commander par date de début décroissante lorsque vos remarques cessent et par date de début ascendante lorsque les remarques sont lancées, auquel cas vous obtiendrez ce code: SQLFIDDLE

select * from mytable
order by remarks,
CASE WHEN remarks = "started"
THEN startdate END ASC,
CASE WHEN remarks ="ceased"
THEN startdate END DESC,
enddate DESC

Situation 2: lorsque la remarque a cessé, vous devez commander les enregistrements par date de début et lorsque la remarque est lancée, vous devez commander par date de fin, auquel cas la requête serait: SQLFIDDLE

select * from mytable
order by remarks,
CASE WHEN remarks = "started"
THEN enddate END DESC,
CASE WHEN remarks ="ceased"
THEN startdate END DESC;

2 pour la réponse № 2

Cela vous aidera probablement à utiliser CASE dans ORDER BY

SELECT * FROM tblRecord
ORDER BY CASE Remarks WHEN "started" THEN Lastdate
ELSE FirstDate END
DESC