我正在尝试结合使用Double Metaphone和其他字符串比较功能。 Double Metaphone为您提供每个名称2个编码值。 为此,我采用了全名,并针对名称的每个部分(FirstName,MiddleName等...,LastName)将其拆分为单独的行,并对它们进行了编码。现在,我想将它们重新组合为单个字符串,以进行每种可能的组合,以使用另一个比较功能。
.Parent.Cut
我将得到一个像这样的表:
现在,我需要每个DblMetC的笛卡尔积(按原点,namePartId分组)。看起来像:
答案 0 :(得分:1)
根据定义,笛卡尔将意味着您也将具有逆值...
select distinct
x.OriginID
,x.DblMetC + ' ' + y.DblMetC
from #MADblMetCombined x
left join #MADblMetCombined y on
y.NamePartId != x.NamePartId and x.OriginID = y.OriginID
退货
+----------+------------------+
| OriginID | (No column name) |
+----------+------------------+
| 3 | AJNNT AN |
| 3 | AJNNT JN |
| 3 | AN AJNNT |
| 3 | AN FJNNT |
| 3 | FJNNT AN |
| 3 | FJNNT JN |
| 3 | JN AJNNT |
| 3 | JN FJNNT |
| 19 | AJNNT AN |
| 19 | AJNNT ARNKK |
| 19 | AJNNT FRNKK |
| 19 | AJNNT JN |
| 19 | AN AJNNT |
| 19 | AN ARNKK |
| 19 | AN FJNNT |
| 19 | AN FRNKK |
| 19 | ARNKK AJNNT |
| 19 | ARNKK AN |
| 19 | ARNKK FJNNT |
| 19 | ARNKK JN |
| 19 | FJNNT AN |
| 19 | FJNNT ARNKK |
| 19 | FJNNT FRNKK |
| 19 | FJNNT JN |
| 19 | FRNKK AJNNT |
| 19 | FRNKK AN |
| 19 | FRNKK FJNNT |
| 19 | FRNKK JN |
| 19 | JN AJNNT |
| 19 | JN ARNKK |
| 19 | JN FJNNT |
| 19 | JN FRNKK |
+----------+------------------+
要获得想要的东西,您需要下面的 ,这不是真正的笛卡尔积:
select
x.OriginID
,coalesce(x.DblMetC + ' ' + y.DblMetC + ' ' + z.DblMetC,x.DblMetC + ' ' + y.DblMetC,x.DblMetC)
from #MADblMetCombined x
inner join #MADblMetCombined y on
y.NamePartId = x.NamePartId +1 and x.OriginID = y.OriginID and y.NamePartId = 2
left join #MADblMetCombined z on
z.NamePartId = x.NamePartId + 2 and z.OriginID = x.OriginID and z.NamePartId = 3