2017-10-21 1 views
0

J'ai cette requête dans laquelle j'inclus une déclaration case:Comment utiliser ORDRE Mysql PAR cas pour organiser les requêtes résultats

SELECT 
    tsp_filtered_data.increment_id, 
    tsp_filtered_data.ESN, 
    tsp_filtered_data.Model, 
    tsp_filtered_data.Fault, 
    CASE 
     WHEN tsp_filtered_data.ESN RLIKE '^[0-9A-F]{8}$' 
      THEN 'valid ESN' 
      ELSE 'Invalid ESN' 
    END AS ESN_status 
FROM 
    tsc_document_status 
INNER JOIN 
    tsp_filtered_data ON tsp_filtered_data.Document_id = tsc_document_status.warehouse_transfer_note_id 
ORDER BY 
    tsp_filtered_data.ESN DESC 

et retourne cette sortie:

enter image description here

Can J'utilise ces résultats de 'ESN valide' et 'ESN invalide' pour commander par

mon exigence est de placer toutes les listes 'invalide ESN' au sommet de les résultats interrogés, tandis que la liste «Valid ESN» est affichée.

comment puis-je faire la modification à la requête ..

+1

'COMMANDER PAR ESN_status, tsp_filtered_data.ESN DESC' – Manav

Répondre

0
SELECT 
    tsp_filtered_data.increment_id, 
    tsp_filtered_data.ESN, 
    tsp_filtered_data.Model, 
    tsp_filtered_data.Fault, 
    case when tsp_filtered_data.ESN RLIKE '^[0-9A-F]{8}$' then 'valid ESN' else 'Invalid ESN' end AS ESN_status 
    FROM 
    tsc_document_status 
    INNER JOIN tsp_filtered_data ON tsp_filtered_data.Document_id = tsc_document_status.warehouse_transfer_note_id 
    ORDER BY ESN_status,tsp_filtered_data.ESN DESC  //Modified line 

Qu'est-ce qu'il va faire est que le premier, il triera le résultat Ovrimos par ordre croissant de ESN_status. Maintenant, pour les enregistrements ayant le même ESN_status, il va les trier dans l'ordre décroissant de tsp_filtered_data.ESN

Espérons que ça aide!

+0

Avez-vous essayé la question ci-dessus? –

3

Utilisation ORDER BY FIELD:

ORDER BY FIELD(ESN_status, 'Invalid ESN', 'Valid ESN') 

requête complète:

SELECT 
    t2.increment_id, 
    t2.ESN, 
    t2.Model, 
    t2.Fault, 
    CASE WHEN t1.ESN RLIKE '^[0-9A-F]{8}$' 
     THEN 'Valid ESN' ELSE 'Invalid ESN' END AS ESN_status 
FROM tsc_document_status t1 
INNER JOIN tsp_filtered_data t2 
    ON t1.Document_id = t2.warehouse_transfer_note_id 
ORDER BY 
    ORDER BY FIELD(ESN_status, 'Invalid ESN', 'Valid ESN') 

Notez que j'ai présenté des alias de table qui laisse votre requête plus facile à lire (OMI). Vous êtes libre d'ajouter plusieurs niveaux de tri à votre clause ORDER BY, bien que ma réponse doive répondre à ce que vous avez demandé dans votre question.