J'ai une table rôles dont je voudrais récupérer les données dans un ordre spécial.
La table contient des champs id et description .
Je voudrais obtenir la description de la valeur de la dernière ligne EN PREMIER, puis obtenir le reste des données de description dans l'ordre croissant.
Je veux dire récupérer d'abord le dernier identifiant, puis le reste dans l'ordre croissant normal.
La table est référencée par une autre table et ne peut donc pas être réorganisée pour y parvenir.
Est-ce possible?
3 Réponses :
Une option trie à l'aide d'une sous-requête pour trouver la dernière description:
SELECT id, description
FROM yourTable
ORDER BY
IF(id = MAX(id) OVER (), 0, 1),
id;
Si vous utilisez MySQL 8 ou une version ultérieure, nous pouvons essayer d'éviter la sous-requête en utilisant MAX code> en tant que fonction analytique:
SELECT id, description
FROM yourTable
ORDER BY
CASE WHEN id = (SELECT MAX(id) FROM yourTable) THEN 0 ELSE 1 END,
id;
Veuillez essayer ceci.
Declare @tbl Table(
id INT ,
description Varchar(50),
description22 Varchar(50),
DeptId INT
)
INSERT INTO @tbl VALUES(1,'g1','g2',NULL)
INSERT INTO @tbl VALUES(2,'g2','g3',NULL)
INSERT INTO @tbl VALUES(3,'g3','g1',NULL)
SELECT id, description
FROM @tbl
ORDER BY
CASE WHEN id = (SELECT MAX(id) FROM @tbl) THEN 0 ELSE 1 END
Exemple: ---
SELECT id, description FROM @tbl ORDER BY CASE WHEN id= (SELECT MAX(id) FROM @tbl) THEN 0 ELSE 1 END
Veuillez envisager d'ajouter un commentaire si vous votez contre une réponse.
Veuillez voir l'exemple ajouté dans la réponse.
Veuillez noter.
SELECT id, description
FROM @tbl
ORDER BY
CASE WHEN id= (SELECT MAX(id) FROM @tbl) THEN 0 ELSE 1 END