T-SQL获取2列之间匹配的字符百分比

时间:2019-05-30 21:37:34

标签: sql sql-server

尝试查找两列之间匹配的字符百分比。

表A

ID  Name
1   RICK
2   PATRICK
3   MARK.HI

表B

ID  Name
1   RICK
2   PATRCIK
3   MARK-HI

当我同时连接两个表(A和B)时,如果“名称”列匹配 (表A中的“ RICK” =表B中的“ RICK”),则新的百分比列应显示为100%。

如果我同时连接两个表时“名称”列不匹配  (表A中的“ PATRICK” <>表B中的“ PATRCIK”),它应大致显示该列不匹配的百分比。

我正试图找出混乱的数据。

1 个答案:

答案 0 :(得分:0)

这个问题不是很清楚,但是我已经假设匹配是两个表中的名称都在其中,并且其中一个表中的名称可以不在另一个表中。

DDL

CREATE TABLE MyTab1
(
    MyVAL NVARCHAR(20)
);

INSERT INTO MyTab1 VALUES ('Rick'),('Patrick'),('John'),('Jhon');

CREATE TABLE MyTab2
(
    MyVAL NVARCHAR(20)
);

INSERT INTO MyTab2 VALUES ('Rick'),('Patrikc'),('Fred');

查询

DECLARE @TotalRecords DECIMAL= (
                                   SELECT COUNT(*)
                                   FROM (
                                           SELECT b.MyVal AS Val1,
                                                  a.MyVAL AS Val2
                                           FROM   MyTab1 a
                                                  FULL JOIN Mytab2 b
                                                      ON a.MyVal = b.MyVal
                                         ) a
                                 );

DECLARE @Matches DECIMAL  = (
                                 SELECT COUNT(*)
                                 FROM (
                                           SELECT b.MyVal AS Val1,
                                                  a.MyVAL AS Val2
                                           FROM   MyTab1 a
                                                  FULL JOIN Mytab2 b
                                                      ON a.MyVal = b.MyVal
                                      ) a
                                 WHERE Val1 IS NOT NULL AND Val2 IS NOT NULL
                            );

SELECT (@Matches / @TotalRecords) * 100

在此示例中,返回值是16.6%,因为两个表中有6个唯一值,其中两个表中的1个是相同的-(1/6)* 100 = 16.6