如何比较表的行与表的所有其他行?

时间:2017-07-18 15:06:46

标签: sql sql-server sql-server-2008

我想创建一个脚本,该脚本获取一个表的行,这些行在其ASCII总和中具有特定的数学差异,并将行添加到单独的表中,或者甚至在它们具有该差异时标记不同的字段。

例如,我希望找到字A的ASCII和和字B的ASCII总和(两者都存储在表的行中)的差异为63或31。

我可能会使用循环来选择这些行,但SQL并不是我最大的优点。

ItemID | asciiSum |ProperDiff
-------|----------|----------
1      | 100      |
2      | 37       |
3      | 69       |
4      | 23       |
5      | 6        |
6      | 38       |

运行代码后,字段ProperDiff将更新为包含项目ID 1,2,3,5,6的“是”,因为AsciiSum为1和2(100-37)= 63等。

1 个答案:

答案 0 :(得分:0)

这不会很快,但我认为它符合您的要求:

update t
    set ProperDiff = 'yes'
    where exists (select 1
                  from t t2
                  where abs(t2.AsciiSum - t.AsciiSum) in (63, 31)
                 );

它应该可以在小桌子上使用。