日期:2014-05-17  浏览次数:20415 次

请教:求两行数据中大小相差x的个数
列名 为    id   T1  T2  T3  T4  T5  T6  T7
            A   69  80  93  78  40  80  95
            B   79  82  99  60  55  81  90
  如果设置x为1,B行中与A:80 相差1的有2个数(79,81),与A:78相差1的有1个数(79)
 故 一共是 2*2+1=5个。
请问这个在SQL怎么做?
------最佳解决方案--------------------
select COUNT(*)+(select COUNT(*) from Table_1 where a in(select b-1 from Table_1)) from Table_1 where a in(select b+1 from Table_1) 

------其他解决方案--------------------
就这样检索出来,放在程序里双循环不可以吗?
------其他解决方案--------------------
这样似乎不能对行中所有数+1和-1操作
引用:
select COUNT(*)+(select COUNT(*) from Table_1 where a in(select b-1 from Table_1)) from Table_1 where a in(select b+1 from Table_1)

------其他解决方案--------------------
大量数据的从数据库读取和存储程序,运行效率很差
引用:
就这样检索出来,放在程序里双循环不可以吗?

------其他解决方案--------------------
解决方法:
1 先做行列变化
2 再集合中查找相差1的个数求和
create table #A(id char(5) ,t1 int, t2 int ,t3 int,t4 int ,t5 int, t6 int)
insert into #A
select 'A' ,71 ,78,76,77,75,80 union all
select 'B',72,76,79,83,84,88
go
with TB as (select * from #A unpivot (val for T in ([t1],[t2],[t3],[t4],[t5],[t6])) as b)
select COUNT(val)+(select COUNT(val) from TB where val in (select (val-1) from TB where [ID]='b') and id='A')from TB where val in (select (val+1) from TB where [ID]='b') and id='A'