1
votes

caractère spécial qui vient en dernier dans l'ordre alphabétique sql

J'ai besoin de mettre un enregistrement à la fin de l'ensemble de résultats trié par un champ de colonne dans l'ordre croissant.

LIKE:

Client  | ... | Admin  |  Intern | ..
---------------------------------------
#TOTAL# | ... | 4      |  2      | .. <-- this row here is grand total
A       | ... | 1      |         | ..
B       | ... | 1      |  1      | ..
C       | ... | 2      |  1      | ..

Ce qui est défini par l'utilisateur valeur de la colonne.

Voici ce que j'essaye de faire:

        SELECT cnt.name as Client, NULL, NULL, NULL, ', @COL_SUM, '
        FROM
        task as tsk

        LEFT JOIN client cnt
            ON tsk.client_id = cnt.id            
        GROUP BY tsk.client_id 

        UNION ALL

        SELECT "#TOTAL#",NULL,NULL,NULL, ', @COL_SUM, '
        FROM task as tsk

        ORDER BY Client ASC

Ceci renvoie l'ensemble de résultats comme:

SELECT "#TOTAL"...


8 commentaires

C'est encore trop vague et ambigu. À quoi ressemblent vos données et à quoi voulez-vous que vos résultats ressemblent? Donnez des exemples spécifiques - il existe certainement de meilleures façons d'y parvenir que de truquer les caractères en fonction de l'ordre de tri.


Si vous vous demandez quels caractères vous pouvez ajouter à quelque chose pour qu'il soit trié en dernier, ceci ascii table devrait pouvoir vous aider. EDIT: La recherche d'une table ASCII devrait faire l'affaire si ce lien cesse de fonctionner. Ecrire | TOTAL | , {TOTAL} ou ~ TOTAL ~ devrait faire l'affaire.


@AleksG J'ai mis à jour mon message .. J'espère que cela est clair.


@LiHRaM Mais faites attention aux caractères non latins


Où ces données doivent-elles être utilisées? Si vous prévoyez de le sortir quelque part dans le code, il peut être préférable de ne pas inclure le total dans votre sql. Au lieu de cela, lorsque vous sortez des données de ligne, ajoutez les valeurs à la volée, puis affichez les totaux. De cette façon, ce sera toujours le dernier.


en gros, vous voulez ajouter le total au dernier résultat de votre requête.


@DarkRob oui c'est ça.


@Azima Les réponses vous ont-elles aidé ou avez-vous besoin d'autre chose?


3 Réponses :


1
votes

Essayez cette variante de code.

Pour mysql :

    SELECT * FROM (
    SELECT TOP 100 PERCENT cnt.name as Client, NULL, NULL, NULL, ', @COL_SUM, '
    FROM
    task as tsk 
    LEFT JOIN client cnt
        ON tsk.client_id = cnt.id            
    GROUP BY tsk.client_id 
    ORDER BY TSK.CLIENT_ID) AS DATA
    UNION ALL
    SELECT "#TOTAL#",NULL,NULL,NULL, ', @COL_SUM, '
    FROM task as tsk

Pour serveur sql p >

    SELECT 0 as [OrderBy], cnt.name as Client, NULL, NULL, NULL, ', @COL_SUM, '
    FROM
    task as tsk 
    LEFT JOIN client cnt
        ON tsk.client_id = cnt.id            
    GROUP BY tsk.client_id      
    UNION ALL
    SELECT 1 , "#TOTAL#",NULL,NULL,NULL, ', @COL_SUM, '
    FROM task as tsk
    ORDER BY [ORDERBY], cLIENT_ID

Étant donné que vous ne pouvez pas appliquer la commande par ordre dans la première partie de votre requête, il existe donc une méthode pour le faire, 100% supérieurs , et vous pouvez appliquer la clause order by dans votre requête interne ou sous-requête.

J'espère que cela vous aidera.


0 commentaires

1
votes

Vous pouvez ajouter une autre colonne constante aux requêtes individuelles indiquant s'il s'agit d'un total ou d'une ligne régulière et classer par celle-ci en premier.

SELECT *
       FROM (SELECT 0 first_order,
                    cnt.name client,
                    ...
             UNION ALL
             SELECT 1 first_order,
                    '#TOTAL#' client,
                    ...) x
       ORDER BY first_order,
                client;


0 commentaires

1
votes

Ajoutez simplement votre condition à la clause ORDER BY :

order by Client = '#TOTAL#', Client


0 commentaires