2016-08-19 17 views
0

私はこの質問hereの一種のヘルプが、私の問題は少し異なると言うことから始めたいと思います。SQL Serverの複数形式の電話番号を比較

私は2つのテーブルを持っています。最初のものはあります

| AREACODE| PHONENUMBER | Company Name | 
=========================================== 
| 800 | 115-4454 | Sample Company | 
| 800 | 141-2254 | Sample Company2 | 
| 800 | 113-9857 | Sample Company3 | 

2番目の表はあります。第二の表の

|PHONENUMBER| 
============= 
|18001154454| 
| 7274313 | 

このフォーマットは、テーブル間の項目に一致するようにSQLで偉大ではない誰かのように私のために本当に難しいことになります。

リンク先と比較して私の質問の違いは、どのようにしてもテーブルを変更できないということです。

表1の市外局番+電話番号が表2の電話番号と一致する場合、会社名という列を選択する必要があります。

私は、長さをチェックし複雑な部分文字列の変更を行うためにCASE WHENを使用する解決策を検討しましたが、それは正しい方法ではないかと疑います。どんな助けもありがとう。何かが不明な場合は尋ねてください。私はあなたのために明確にするために最善を尽くします。

EDIT

すべての列が文字列です。上記の例からだから

予想される結果は、それに電話番号と電話番号のテーブルの間の任意のマッチの会社名は、最初のテーブル(エリアコード+ PHONENUMBER)から元の形式だであろう

Iはこれらは、すべての文字列の列をしていると仮定すると、

PHONENUMBER | Company Name | 
=================================== 
    800-115-4454 | Sample Company | 
+0

期待される出力サンプルを表示してもらえますか? – TheGameiswar

+1

ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

どのようなデータ型が列ですか? –

答えて

2

を期待する、あなたはREPLACE-を取り除くと、単一の列と比較する個別の列を組み合わせることができます。

場合

INNER JOIN MultiColumnTable M 
    ON M.AreaCode + REPLACE(M.PhoneNumber,'-','') = S.PhoneNumber 
    OR '1' + M.AreaCode + REPLACE(M.PhoneNumber,'-','') = S.PhoneNumber 

ないエリアコードがない:先頭の1が存在する場合に

INNER JOIN MultiColumnTable M 
    ON M.AreaCode + REPLACE(M.PhoneNumber,'-','') = S.PhoneNumber 
    OR '1' + M.AreaCode + REPLACE(M.PhoneNumber,'-','') = S.PhoneNumber 
    OR REPLACE(M.PhoneNumber,'-','') = S.PhoneNumber 

完全クエリ:

SELECT  M.AreaCode + '-' + M.PhoneNumber "PhoneNumber", M.CompanyName 
FROM  SingleColumnTable S 
INNER JOIN MultiColumnTable M 
    ON M.AreaCode + REPLACE(M.PhoneNumber,'-','') = S.PhoneNumber 
    OR '1' + M.AreaCode + REPLACE(M.PhoneNumber,'-','') = S.PhoneNumber 
    OR REPLACE(M.PhoneNumber,'-','') = S.PhoneNumber 

免責事項:これはおそらく絶対的なごみのように動作し、うまくいけば繰り返し使用する必要はありません。

+0

これは、両方のテーブルで一致するすべての市外局番を想定して動作するはずです。しかし、質問に基づいて、それはSingleColumnTableが正面を持っているかもしれないか、まったく市外局番を持っていないようです。 –

+0

@JacobMorrisはい、それ以上のサンプルデータがなければ、言い難いです。私はこれがOPが望むロジックだと思いますが、エリアコードの先頭1や、処理が必要な「NULL」など、他にもたくさんの要素があります。 –

+0

問題は先頭の1または市外局番がないことです。私は最小限のデータをお詫び申し上げます。それはアイデアを与えるだろうと思った。 – Resistance

0

このスクリプトを試してください。比較文字列の前後に空白がある可能性があります。また、市外局番にNULL値が必要です。

SELECT * 
FROM SingleColumnTable S 
INNER JOIN MultiColumnTable M 
    ON LTRIM(RTRIM(ISNULL(M.AreaCode,''))) + LTRIM(RTRIM(REPLACE(M.PhoneNumber,'-',''))) = LTRIM(RTRIM(S.PhoneNumber)) 
関連する問題