首页 > 解决方案 > T-SQL 计算字母数字键的最大值

问题描述

我有一个客户表,其中有一个由 5 个字母和 3 个数字组成的字母数字键。

我正在尝试为每 5 个字母依次计算下一个 3 位数字,例如:

示例键

ALPHA001
ALPHA002
NUMBE001
NUMBE002
NUMBE003
PREST001
PREST002
PREST003
PREST004
PREST005

从上面的键列表中,我想返回每个唯一的 5 个字母键的最大值。IE

返回值

ALPHA002
NUMBE003
PREST005

标签: sqlsql-servertsql

解决方案


首先:不要在一列中存储多个值。应将密钥和运行编号存储在单独的列中,并将它们组合起来仅用于显示目的...

尝试这个

DECLARE @mockupTable TABLE(ID INT IDENTITY,YourKey VARCHAR(100));
INSERT INTO @mockupTable VALUES
 ('ALPHA001')
,('ALPHA002')
,('NUMBE001')
,('NUMBE002')
,('NUMBE003')
,('PREST001')
,('PREST002')
,('PREST003')
,('PREST004')
,('PREST005');

WITH cte AS
(
SELECT *
      ,ROW_NUMBER() OVER(PARTITION BY LEFT(YourKey,5) ORDER BY CAST(RIGHT(YourKey,3) AS INT) DESC) AS PartitionedRowNumber 
FROM @mockupTable
)
SELECT *
FROM cte
WHERE PartitionedRowNumber =1;

结果

ID  Key
2   ALPHA002
5   NUMBE003
10  PREST005

推荐阅读