は、私はSQL Serverの(2012年)に次の表があるとします。SQL Serverの - 私のデータのマッピング/集合体を作成するための効率的な方法
MyTable:
Col1: Col2: Col3: Col4: Val1: ... Valn:
a b c d 123 1234
....
を私はマップするマッピングテーブルを作成するために探しています特定の値に対するCol1
- Col4
の特定の値を指定します。以下のように、例えば、それが見える可能性があります。たとえば、最初の行は次のように読み取ることができ、
MyMaps:
Col1: Col2: Col3: Col4: Label:
a <null> <null> d Label1
<null> b <null> d Label2
: はどこCol1
= MyTableというの任意の行にラベル「のLabel1」を与えます「」 Col4
= 'd'。だから、
、このマッピングを可能にすることができ、私が作成したクエリは次のとおりです。
SELECT
MyMaps.Label
,MyTable.Val1
...
,MyTable.Valn
FROM
MyTable
INNER JOIN MyMaps
ON ISNULL(MyTable.Col1, '') = COALESCE(MyMaps.Col1, MyTable.Col1, '')
AND ISNULL(MyTable.Col2, '') = COALESCE(MyMaps.Col2, MyTable.Col2, '')
AND ISNULL(MyTable.Col3, '') = COALESCE(MyMaps.Col3, MyTable.Col3, '')
AND ISNULL(MyTable.Col4, '') = COALESCE(MyMaps.Col4, MyTable.Col4, '')
そして、それは動作しますが、これは、これを達成するための良い方法であるかがあれば場合、私は好奇心が強いですMyTableはかなり大きなテーブルであるため、マッピングを作成する上でより効率的な方法です。
ご意見/ご提案はありますか?
これは一致し、Label1もそうです。どのように正しいラベルを選ぶのですか?また、結合条件に基づいて、COALESCEとISNULLを使用しているため、大きなテーブルではうまく機能しません。 – dfdsfdsfsdf
'MyTable'テーブルの1つの行に対して2つのマップが見つかったらどうなりますか? –
@KMC&Siyavash、良い点。私はこれを他にどのように行うのかという手がかりがなく、私のデータが与えられれば、そうでないと仮定しています....私は真にこの種のマッピングを達成するために他にどのような手がかりを持っていません。 –