0

SQL Server テーブルの各行を順番にチェックできるようにする SQL ステートメントを作成しようとしています。フィールドの値が複数離れている場合、そのフィールドの値と1つ以上離れているフィールドを返したいと思います。たとえば、私のフィールドは次のようになります。

値フィールド

V100819493
V100819492
V100819491
V100819232

この場合、1 以上離れている値は次のとおりです。

V100819232
V100819491 

selectステートメントでこれを行う方法について何か考えはありますか?

4

2 に答える 2

5

文字ベースの数学演算を行っていない場合、これは少し簡単になります。この表のすべての値は、1 つの英字とそれに続く数字で構成されていると想定しています。

/* 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
于 2012-08-03T21:28:22.313 に答える
0

これを select ステートメントで直接行うことはできません。最善の策は、ORDER BY ステートメントを使用して値を選択し、それらをループすることです。各値をその前の値と照合し、差が 1 より大きいかどうかを確認します。

理論的には、チェックを通過する各値をセカンダリ (おそらく一時) テーブルに挿入する関数を作成することで、これをすべて SQL で行うことができますが、可能であれば、C#、Visual Basic でチェックを実装すると、明らかなパフォーマンスが得られます。理由。

于 2012-08-03T21:06:30.460 に答える