注册 登录
编程论坛 SQL Server论坛

sql 查询:字符串比较。只有 19 分了,不成敬意。

wangf1978 发布于 2014-12-02 13:43, 513 次点击
表1
id    da    df
1    AB     
2    AC     
3    B   
表2
id    ckda           fz
1    AB            5
2    ABC               5
3    ABCD         5
规则:表1中的da字段如果完全吻合则5分,部分吻合则得2分。
查询结果
id    da        df
1    AB        5
2    AC          2
3    B           2
3 回复
#2
mxbing19842014-12-06 15:45
create table 表1
 (
 id int,
 da varchar(10)
 )
 go

 insert into 表1 values(1,'AB')   
 insert into 表1 values(2,'AC')   
 insert into 表1 values(3, 'B')
 insert into 表1 values(4, 'BC')
 go
create table 表2
(
 id int,
 ckda varchar(10),
 fz  int
)
go                  
insert into 表2 values(1,'AB',5)            
insert into 表2 values(2,'ABC',5 )        
insert into 表2 values(3,'ABCD',5)      
insert into 表2 values(4,'AC',5)
go

Select *,Case
When Exists(Select '' From 表2 Where 表1.id=表2.id And 表1.da=表2.ckda) Then 5
When Exists
(
    Select '' From
    (
        Select SUBSTRING(da,number,1) as da From 表1 A Cross Join
        (
            Select number From master.dbo.spt_values
                Where type='P' And number Between 1 And 4
        ) B Where id=表1.id
    ) M  Where da<>'' And da Not In
    (
        Select SUBSTRING(ckda,number,1) as ckda From 表2 A Cross Join
        (
            Select number From master.dbo.spt_values
                Where type='P' And number Between 1 And 4
         ) B Where id=表1.id)
) Then 0 Else 2 End df
From 表1


只有本站会员才能查看附件,请 登录

 
第1题完全正确得5分
第2,3部分正确得2分
第4题包含错误答案得0分

你不是在百度问问采纳了么,害得我答案写好了,都没得回答
#3
volte2014-12-08 09:15
select a.id, a.da,
case when a.da=b.ckda then 5 when charindex(a.da, b.ckda)>0 then 2 else 0 end as df
from 表1 a left join 表2 b on a.id=b.id
#4
mxbing19842014-12-08 12:26
回复 3 楼 volte
不能用charindex()啦,比如,我选择的答案是AC,标准答案是ABC,用charindex判断,就得0分,实际上该得2分
1