在SQL Server中查找多于一个值的记录

Cod*_*000 0 sql-server-2008

我正在尝试编写一个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)