2011-07-12 24 views
1

我想基於兩列已合併(通常不完美)到另一個表列中的兩個表。我試圖加入表格,因此正確的記錄是相互關聯的,所以我可以比較FDebitDebit字段。基於已解析的列內容加入兩個表

FMEMO通常是通過取Num,然後添加space,然後添加Memo文本生成的。正如你在下面看到的,我們的過程還不完美。因此,我想匹配Num,然後space,然後將備註字段的前10個字符匹配到FMEMO字段。

我已經在示例數據下面包含代碼。你能否提供一些關於如何做到這一點的建議?

發票表

MEMO民借記
用品。索托卡諾1135 2.25
吸水管(1-1/2 「)由食品3 74.04
軟管/管件:編織管(1」 由食物3 98.72
QP10邁爾斯表面泵(60HZ)3 206.27
) 籠包括˚F罐,明礬零件盒和2桶明礬3 752.03
籠包括閥歧管,F1 & F2 3 3774.08
籠IBC在它1135 268.41
聚氯乙烯飾品安裝LWTS的。 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邁爾斯表面泵(60HZ)3970 206.27
3籠包括˚F罐,明礬份明礬的箱和2桶14474 752.03
3籠包括閥歧管,F1 & F2 72638 3774.08
3籠IBC在它5166 268.41
1175聚氯乙烯飾品安裝LWTS的。82.03 4.26
1175聚氯乙烯飾品安裝LWTS。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 
+1

我認爲你的時間會更好地花在修復你的數據庫設計上。希望誰決定這樣設置它已經被解僱了。 –

回答

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並且以相同數量的字符加入另一個表格。

當然這是一個非常低效和醜陋的查詢。我寧願規範數據庫中的數據(解析乾淨等)

+0

我想修復數據庫(這是我在工作中咆哮的事情之一......)。像這樣的東西讓我想要棒球棒到數據庫/代碼(偶爾開發者)。 –

+0

感謝您的提示。查詢並沒有像我希望的那樣工作,所以我把你的和X-Zero的建議和解析數據,以便連接可以直截了當。現在它工作得很好。再次感謝! –