我正在尝试连接两个基于两列的表,这两列已经合并(通常不完美)到另一个表列中。我正在尝试加入表格,以便正确的记录相互关联,因此我可以比较FDebit
和Debit
字段。
FMEMO
通常是通过Num
,然后添加space
,然后添加Memo
文字生成的。如您所见,我们的流程尚不完善。因此,我想将Num
,然后是space
,然后将备注字段的前10个字符与FMEMO
字段相匹配。
我在下面的代码中包含了示例数据。能否请你就如何做到这一点提出一些建议?
MEMO Num DEBIT
耗材。索托卡诺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
耗材。索托卡诺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
用于安装LWTS的1175个Pvc配件。 82.03 4.26
用于安装LWTS的1175个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
答案 0 :(得分: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)
连接数字并从字段中取出这么多字符,如果是3然后是9,如果是1111然后是9-4,则从另一个表中加入相同数量的字符。
当然,这是一个非常低效和丑陋的查询。我宁愿规范数据库中的数据(解析干净等)