我正在尝试编写一个sql语句,它将允许我按顺序检查sql server表中的每一行.如果字段的值超过一个,我想返回该字段的值和超过1的字段.例如,我的字段看起来像这样:
ValueField
V100819493
V100819492
V100819491
V100819232
Run Code Online (Sandbox Code Playgroud)
在这种情况下,唯一超过1的值是:
V100819232
V100819491
Run Code Online (Sandbox Code Playgroud)
有关如何在select语句中执行此操作的任何想法?
小智 5
如果你不进行基于角色的数学运算,这会变得容易一些; 我假设这个表中的每个值都包含一个字母字符后跟数字.
/* Create sample data */
declare @table Table (ValueField varchar(40))
insert into @table (ValueField)
select 'V100819493'
UNION SELECT 'V100819492'
UNION SELECT 'V100819491'
UNION SELECT 'V100819232'
/* Join table against itself, using a 'staggered' join to join each record to the previous one. */
select * from
(
select
ValueField as High_Value,
CONVERT(BIGINT,SUBSTRING(valuefield, 2, 800)) as Numeric_Value,
ROW_NUMBER() over (order by Valuefield) as line
from @table
) t1
left outer join
(
select
ValueField as Low_Value,
CONVERT(BIGINT,SUBSTRING(valuefield, 2, 800)) as Numeric_Value,
ROW_NUMBER() over (order by Valuefield) as line
from @table
)t2 on t1.line -1 = t2.line
where t1.Numeric_Value - t2.Numeric_Value <> 1
Run Code Online (Sandbox Code Playgroud)