原表

排序后为

要求对表排序: 排序规则: 1. 按照列 Last排序 2. 数字类型的排在一块,按升或降排序 3. 数字类型小数点保留两位,前面要加$, 如$23.98 4. 字符类型的排在一块,按升或降排序 5. 能够对数字型和字符型的排序 方法一:对5的要求并不灵活,只用UNION SELECT FIRST,ALERT FROM ( SELECT TOP 100 FIRST,('$'+CONVERT(varchar,CONVERT(money,Last,1)) ) AS ALERT FROM NUM WHERE PATINDEX('%[^0-9|.]%',Last)=0 ORDER BY CONVERT(float,LAST) )AS M UNION ALL SELECT FIRST,ALERT FROM ( SELECT TOP 100 FIRST,( Last ) AS ALERT FROM NUM WHERE PATINDEX('%[^0-9|.]%',Last)<>0 ORDER BY ALERT )AS N 注意:必须用UNION ALL, 不能只有UNION, 否则字符和数字型的会交叉在一起 方法二:采用UNION 和CASE,子查询中多添加列来最字符和数字型的排序 SELECT FIRST,ALERT FROM ( SELECT 1 AS YAO,FIRST,('$'+CONVERT(varchar,CONVERT(money,Last,1)) ) AS ALERT FROM NUM WHERE PATINDEX('%[^0-9|.]%',Last)=0 UNION ALL SELECT 2 AS YAO,FIRST,LAST AS ALERT FROM NUM WHERE PATINDEX('%[^0-9|.]%',Last)<>0 ) AS U ORDER BY YAO, CASE WHEN YAO=1 THEN CONVERT(float,SUBSTRING(ALERT,2,LEN(ALERT)-1)) END, CASE WHEN YAO=2 THEN ALERT END 关于UNION 如果UNION 联合的每一个查询有ODER BY则需要加TOP, 上述两个方法中SELECT 出的表后一定要有AS
本文介绍了一种在SQL中对数字和字符混合的数据进行有效排序的方法。通过使用UNION ALL和CASE WHEN语句,可以实现将数字类型的条目按升序或降序排列,并将字符类型的条目同样按升序或降序排列。此外,还提供了具体的SQL脚本来展示如何实现这一排序逻辑。
1407

被折叠的 条评论
为什么被折叠?



