Sql 联接表/联接内的Select语句时出现问题

Sql 联接表/联接内的Select语句时出现问题,sql,sql-server,ssms,Sql,Sql Server,Ssms,一个表有一个包含SKU编号(包括破折号)的“项目”列(我们称之为DASHDB),而另一个表有一个包含SKU编号(不包括破折号)的“项目”列(我们称之为NODASHU DB)。我需要把这两张桌子连接起来 我知道我可以做这样的事情: FROM (SELECT REPLACE (ITEMDASH,'-','') AS ITEMNO FROM DASHDB) AS NEWITEMNO LEFT JOIN NODASH_DB ON NEWITEMNO.ITEMNO = NODASH_DB.ITEMNO

一个表有一个包含SKU编号(包括破折号)的“项目”列(我们称之为DASHDB),而另一个表有一个包含SKU编号(不包括破折号)的“项目”列(我们称之为NODASHU DB)。我需要把这两张桌子连接起来

我知道我可以做这样的事情:

FROM (SELECT REPLACE (ITEMDASH,'-','') AS ITEMNO FROM DASHDB) AS NEWITEMNO
LEFT JOIN NODASH_DB ON NEWITEMNO.ITEMNO = NODASH_DB.ITEMNO
然而,我已经从其他表中提取了数据,这大约是四个连接

我试过:

LEFT JOIN (SELECT REPLACE(ITEMDASH,'-','') AS ITEMNO FROM DASHDB) AS NEWDB ON NEWDB.ITEMNO = NODASH_DB.ITEMNO

但它不接受正确的数据库。使用Microsoft SQL Server Management Studio 17。

没有示例数据很难判断,但这应该可以:

LEFT JOIN DASHDB 
ON REPLACE(DASHDB.ITEMDASH,'-','') = NODASH_DB.ITEMNO

例如,请参见

最佳解决方案是修复数据。无论是从数据角度还是从性能角度来看,将破折号存储在一个位置而不是另一个位置都会导致灾难。我完全同意。然而,数据是从ERP系统中提取的。我们并没有以不同的方式输入它,这只是系统将它存储在不同表中的方式。太令人沮丧了。你能添加一个计算列来删除破折号吗?你是我的英雄!非常感谢:)这工作做得很好。