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