web-dev-qa-db-ja.com

VLOOKUPのSQLバージョン

私はSQLを初めて使用しますが、時間があれば、SQLでExcel Vlookup関数を複製するのを手伝ってくれる人がいないかと思いました。

いくつかの調査から、これは私が必要とするjoin関数の1つであると思われますが、両方のテーブルに含まれるデータを選択するだけではなく、値を検索するだけです。別のテーブルに対して1つのテーブル。

データがルックアップテーブルに含まれている場合は値を返し、含まれていない場合はNULLを返します。

私の質問を説明するために、以下にいくつかの例の表を示しました。

製品「C」と「D」は表2にはありませんが、結果テーブルにはありますが、値はNULLであることに注意してください。

また、私はユニークな製品をたくさん持っているので、たとえばハードコーディングを含む答えを探していません。 CASE WHEN [Product] = 'A' THEN...



表1

Product    Quantity
-------------------
A          10
B          41
D          2
C          5
B          16
A          19
C          17
A          21

表2

Product    Cost
-----------------
A          £31.45
B          £97.23



結果表

Product   Quantity    Cost
-----------------------------
A         10          £31.45
B         41          £97.23
D         2           NULL
C         5           NULL
B         16          £97.23
A         19          £31.45
C         17          NULL
A         21          £31.45
5
user3715274

外部結合が必要なように見えます。私の例では左側の結合を使用します。

select t1.Product, t1.Quantity, t2.Cost
from table1 as t1
left outer join table2 as t2
    on t1.Product = t2.Product

外側のキーワードを省略することもできます。

select t1.Product, t1.Quantity, t2.Cost
from table1 as t1
left join table2 as t2
    on t1.Product = t2.Product
7
Lennart

これがレナートの答えの更新版で、本当にうまくいきます。

select *
from table1 as t1
left outer join table2 as t2
    on t1.Product = t2.Product
    and t2.Product <> ''
left outer join table3 as t3
    on t1.Product = t3.Product2
    and t3.Product2 <> ''

重要なのは、結合テーブルの列が空白の行を除外する必要があるということです。そうしないと、table1よりも多くの行が返されます。真のvlookupは、左側のテーブルに行を追加しません。

効果のために3番目のテーブルも追加しました。

1
user890332