根据已解析的列内容连接两个表

Rya*_*eif 1 sql t-sql sql-server join

我试图基于两个已经组合(通常不完美)到另一个表列的列来连接两个表.我试图加入表格,以便正确的记录相互关联,所以我可以比较FDebitDebit字段.

FMEMO通常通过取所产生的Num,然后加入space,然后添加Memo文本.如您所见,我们的流程尚不完善.因此,我想匹配Num,那么space,则Memo字段到的前10个字符FMEMO字段.

我在下面的代码中包含了示例数据.能否请你就如何做到这一点提出一些建议?

发票表

MEMO Num DEBIT
Supplies.Soto Cano 1135 2.25
吸油管(1-1/2")由食品3 74.04
软管/油管:编织软管(1")由食品3
98.72 QP10 Meyers地面泵(60hz)3 206.27保持
架包括f罐,明矾零件箱体和2个明矾桶3 752.03
笼子包括阀门歧管,F1和F2 3 3774.08
笼子里面装有IBC 1135 268.41
用于安装LWTS的Pvc配件.1175 4.26
安装LWTS的Pvc配件.1175 27.26

费用表

FMEMO FDebit耗材.Soto Cano 41.8 2.25
3吸水软管(1-1/2 74.04
3软管/管道:编织软管(1
98.72 3 QP10 Meyers地面泵(60hz)3970 206.27
3笼子包括f罐,明矾零件盒和2桶明矾14474 752.03
3保持架包括阀门歧管,F1和F2 72638 3774.08
3笼式带有IBC 5166 268.41
1175用于安装LWTS的
Pvc 附件82.03 4.26 1175用于安装LWTS的Pvc附件524.67 27.26

要复制的代码:

CREATE TABLE #tempExpenses (
FMEMO varchar(Max), FDebit money)

CREATE TABLE #tempInvoices (
MEMO varchar(Max), Num integer, DEBIT money)

INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('Supplies. Soto Cano 41.8', 2.25)<br/>
INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('3 Suction Hose (1-1/2', 74.04)<br/>
INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('3 Hose/Tubing:Braided Hose (1', 98.72)<br/>
INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('3 QP10 Meyers surface pump (60hz) 3970', 206.27)<br/>
INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('3 Cage including f tank, alum parts box and 2 buckets of alum 14474', 752.03)<br/>
INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('3 Cage including valve manifold, F1 & F2 72638', 3774.08)<br/>
INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('3 cage with IBC in it 5166', 268.41)<br/>
INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('1175 Pvc accesories for installation of LWTS. 82.03', 4.26)<br/>
INSERT INTO #tempExpenses (FMEMO, FDEBIT) VALUES ('1175 Pvc accesories for installation of LWTS. 524.67', 27.26)<br/>

INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('Supplies. Soto Cano', 1135, 2.25)<br/>
INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('Suction Hose (1-1/2") by the food', 3, 74.04)<br/>
INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('Hose/Tubing:Braided Hose (1") by the food', 3, 98.72)<br/>
INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('QP10 Meyers surface pump (60hz)', 3, 206.27)<br/>
INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('Cage including f tank, alum parts box and 2 buckets of alum', 3, 752.03)<br/>
INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('Cage including valve manifold, F1 & F2', 3, 3774.08)<br/>
INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('cage with IBC in it', 1135, 268.41)<br/>
INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('Pvc accesories for installation of LWTS.', 1175, 4.26)<br/>
INSERT INTO #tempInvoices (MEMO, Num, DEBIT) VALUES ('Pvc accesories for installation of LWTS.', 1175, 27.26)<br/>

SELECT *
FROM #tempExpenses 

SELECT *
FROM #tempInvoices
Run Code Online (Sandbox Code Playgroud)

Bok*_*ius 5

我真的很讨厌自己制作这个TSQL,但我认为这就是你要找的东西:

SELECT *
FROM #tempInvoices i
INNER JOIN #tempExpenses e ON CAST(Num as varchar(10)) + ' ' + SUBSTRING(MEMO,1,9-LEN(CAST(NUM as varchar(10)))) = SUBSTRING(FMEMO,1,10)
Run Code Online (Sandbox Code Playgroud)

其中连接数字并从字段中获取如此多的字符,即如果是3然后是9,如果是1111然后是9-4,则从另一个表中加入相同数量的字符.

当然,这是一个非常低效和丑陋的查询.我宁愿规范数据库中的数据(解析干净等)