当前位置: 首页 > news >正文

SQL 对版本进行排序遇到的问题

背景

物料存在多个版本,我们每次只需要使用最新的版本

问题

  • 问题1:版本使用的是字符串,倒序排序,会导致 版本8 会排在版本11 前面
  • 问题2:版本version字符串既有数字字符串,也有字母字符串

解决思路

  • 对于数字字符串,需要将其转换成整数,
  • 字母字符串则转换成对应的ASCII码值

SQL语句

原本语句


    SELECT 
        material_code AS material_code_in,
        material_name AS material_name_in,
        '' AS material_type_in,
        material_class_small AS material_class_small_in,
        material_class_big AS material_class_big_in,
        erp_code AS erp_code_in,
        version AS version_in,
        unit AS unit_in
    FROM tbl_material_info 
    WHERE material_code IN ('P120','P525A','2070039115')

改写语句

WITH RankedMaterials AS (
    SELECT 
        material_code AS material_code_in,
        material_name AS material_name_in,
        '' AS material_type_in,
        material_class_small AS material_class_small_in,
        material_class_big AS material_class_big_in,
        erp_code AS erp_code_in,
        version AS version_in,
        unit AS unit_in,
        ROW_NUMBER() OVER (
            PARTITION BY material_code 
            ORDER BY 
                CASE 
                    WHEN TRY_CAST(version AS INT) IS NOT NULL THEN TRY_CAST(version AS INT) 
                    ELSE ASCII(SUBSTRING(version, 1, 1)) -- 将字母字符串转换为对应的ASCII码值
                END DESC
        ) AS rn
    FROM tbl_material_info 
    WHERE material_code IN ('P120','P525A','2070039115')
)
SELECT 
    material_code_in,
    material_name_in,
    material_type_in,
    material_class_small_in,
    material_class_big_in,
    erp_code_in,
    version_in,
    unit_in
FROM RankedMaterials
WHERE rn = 1;

相关文章:

  • 软考架构-构件技术
  • 鸿蒙高级开发者认证题库
  • 谷粒商城实战笔记-261-商城业务-订单服务-页面环境搭建
  • 普通项目解决跨域问题和springSecurity解决跨域问题
  • 卸载重装redis
  • Linux自旋锁和读写锁
  • 用java实现的一个本地文件队列,支持并发消费与顺序消费
  • Spring Cloud Consul精选面试题及答案
  • 大模型如何赚钱,杀手级应用是什么、创业机会在哪里?
  • C3面:ASP.NET MVC 中还有哪些注释属性用来验证?
  • 代码随想录算法训练营第十一天|150. 逆波兰表达式求值 、239. 滑动窗口最大值、347.前 K 个高频元素
  • ue5远程渲染和本地渲染的区别,及云渲染的联系
  • 服务器被渗透的表现及检测方法
  • 从匿名内部类到Lambda表达式:Java编程的优雅进化
  • 字符串函数
  • 第3章-01-Python语言基础一篇通
  • Web-ssrfme
  • PowerShell 一键配置IP
  • 如何使用ssm实现基于java斗车交易系统设计与实现+vue
  • 【数据结构】八大排序
  • 安徽省住房和城乡建设厅门户网站/企业网站排名优化
  • 德州市建设小学网站/国际足联世界排名
  • 自己做的网站打开很慢/seo服务是什么意思
  • 网站建设和维护待遇怎样/机器人编程培训机构排名
  • 自己怎样给网站做推广/推广注册app拿佣金
  • 个人网站设计师/十大seo公司