Mysql 按字母顺序排在最后的特殊字符

Mysql 按字母顺序排在最后的特殊字符,mysql,sql,sorting,Mysql,Sql,Sorting,我需要在结果集的最后放一条记录,该记录由列字段按升序排序 比如: 这是用户定义的列值 以下是我正在尝试做的: 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

我需要在结果集的最后放一条记录,该记录由列字段按升序排序

比如:

这是用户定义的列值

以下是我正在尝试做的:

        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
这会将结果集返回为:

Client  | ... | Admin  |  Intern | ..
---------------------------------------
#TOTAL# | ... | 4      |  2      | .. <-- this row here is grand total
A       | ... | 1      |         | ..
B       | ... | 1      |  1      | ..
C       | ... | 2      |  1      | ..
Client |……|行政实习生。。
---------------------------------------

#总数#|……|4 | 2 | .. 请尝试此代码变体

对于
mysql

    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
对于
sql server

    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
由于您无法在查询的第一部分中应用order by,因此有一种方法可以这样做,
top 100%
,您可以在内部查询或子查询中应用
order by
子句


希望这能有所帮助。

您可以在单个查询中添加另一个常量列,以指示它是总计还是常规行,并按该行的顺序排列

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

只需将您的条件添加到
ORDER BY
子句中:

order by Client = '#TOTAL#', Client

这仍然太模糊和模棱两可。您的数据是什么样的?您希望您的结果是什么样的?举个具体的例子——几乎可以肯定,有比根据排序顺序捏造字符更好的方法来实现这一点。如果您想知道哪些字符可以添加到最后排序的内容中,这应该会有所帮助。编辑:如果该链接停止工作,则查找任何ASCII表都可以完成此操作。写
|TOTAL |
{TOTAL}
~TOTAL~
应该就行了。@AleksG我已经更新了我的帖子。。希望这能说明问题。@LiHRaM但一定要注意非拉丁字符这些数据在哪里使用?如果您计划在代码中的某个地方输出它,那么最好不要将总数包含到sql中。相反,在输出行数据时,动态添加值,然后输出总计。这样,它将永远是最后一个。
order by Client = '#TOTAL#', Client