2011-07-12 8 views
1

2つのテーブルを結合して、(たぶん不完全に)別のテーブルの列に結合しようとしています。正しいレコードがお互いに関連付けられるようにテーブルを結合しようとしているので、FDebitフィールドとDebitフィールドを比較できます。解析された列の内容に基づいて2つのテーブルに結合する

FMEMOは、通常、Numを入力し、次にspaceを追加してからMemoテキストを追加して生成されます。下記のように、私たちのプロセスはまだ完璧ではありません。したがって、Num、次にspaceと一致させてから、メモフィールドの最初の10文字をFMEMOフィールドに一致させたいと思います。

以下のコードをサンプルデータとともに含めました。これを達成する方法の提案をしてください。

請求書テーブル

MEMOヌムDEBIT
用品。ソトカノ1135 2.25
サクションホース(1-1/2 ")食品によって3 74.04
ホース/チューブ:編組ホース(1")食物3 98.72
QP10マイヤーズ面ポンプ(60Hzの)3 206.27
によってFタンク、ミョウバン部品箱3 752.03
ケージは、バルブマニホールド、F1 & F2、それは1135年268.41
PVCはLWTSのインストール用アクセサリーにIBCと3 3774.08
ケージを含むミョウバン2つのバケットを含む ケージ。 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タンク、ミョウバン部バルブマニホールド、F1 & F2 72638 3774.08
3 LWTSの取り付けの5166の268.41
1175のPVCアクセサリー。インストール用82.03 4.26
1175のPVCアクセサリーでIBC有するケージを含むボックスとミョウバン2つのバケット14474 752.03
3ケージの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のアドバイスを受け取り、データを解析して結合が簡単になるように、クエリが正しく動作しませんでした。今はうまくいっています。再度、感謝します! –

関連する問題