declare @t table(id int,col1 int,col2 int,col3 int,col4 int,col5 int)
insert @t select 1,25,2,33,44,52
insert @t select 2,22,2,32,48,52
insert @t select 3,23,2,13,234,523
insert @t select 4,24,2,33,24,590
insert @t select 5,25,2,43,4,58
insert @t select 6,21,2,33,14,56
insert @t select 7,21,2,32,34,545
insert @t select 8,21,2,35,45,53
insert @t select 9,21,2,83,46,51
declare @c1 int,@c2 int,@c3 int,@c4 int,@c5 int
declare @Id int
set @id = 5
select @c1 = col1,@c2 = col2 ,@c3 = col3 ,@c4 = col4,@c5 = col5
from @t
where id = @idselect *,
ltrim(
cast((
case when col1 = @c1 then 1 else 0 end +
case when col2 = @c2 then 1 else 0 end +
case when col3 = @c3 then 1 else 0 end +
case when col4 = @c4 then 1 else 0 end +
case when col5 = @c5 then 1 else 0 end 
)*100.0 /5 as numeric(12,2)))+'%' as [相似程序]
from @t
/*id          col1        col2        col3        col4        col5        相似程序   
----------- ----------- ----------- ----------- ----------- ----------- ----------
1           25          2           33          44          52          40.00%
2           22          2           32          48          52          20.00%
3           23          2           13          234         523         20.00%
4           24          2           33          24          590         20.00%
5           25          2           43          4           58          100.00%
6           21          2           33          14          56          20.00%
7           21          2           32          34          545         20.00%
8           21          2           35          45          53          20.00%
9           21          2           83          46          51          20.00%(所影响的行数为 9 行)*/

解决方案 »

  1.   

    select * , 相似度 = cast( 
               ((case when t1.col1 = t2.col1 then 1 else 0 end) + 
               (case when t1.col2 = t2.col2 then 1 else 0 end) + 
               (case when t1.col3 = t2.col3 then 1 else 0 end) + 
               (case when t1.col4 = t2.col4 then 1 else 0 end) + 
               (case when t1.col5 = t2.col5 then 1 else 0 end) + 
               (case when t1.col6 = t2.col6 then 1 else 0 end) + 
               (case when t1.col7 = t2.col7 then 1 else 0 end) + 
               (case when t1.col8 = t2.col8 then 1 else 0 end) + 
               (case when t1.col9 = t2.col9 then 1 else 0 end) + 
               (case when t1.col10 = t2.col10 then 1 else 0 end)) 
               * 1.0 / 10 * 100 as varchar) + '%'
    from
    (select * from tb where id <> '某条记录的ID') t1,
    (select * from tb where id =  '某条记录的ID') t2