論理に基づいて2つのテーブルを結合しようとしていますが、最初のテーブルの各レコードが結合を使用して2番目のテーブルの数値に< =の値を引きます。これがSQLで効率的に達成できるのであれば私は不思議です。私は日付に焦点を当てたいくつかの質問を見つけましたが、全く同じものはありません。SQL JOINの値が数値以下です
私は2つのテーブルを持っています。 「表1」は、プライマリ・テーブルである
**Table1**
+---------+---------+--------+
| Product | Carrier | Weight |
+---------+---------+--------+
| Z | B | 600 |
+---------+---------+--------+
| Z | B | 350 |
+---------+---------+--------+
| Y | A | 150 |
+---------+---------+--------+
| X | A | 75 |
+---------+---------+--------+
| Y | B | 10 |
+---------+---------+--------+
| X | A | 40 |
+---------+---------+--------+
「表2は」
**Table2**
+---------+--------+------+
| Carrier | Weight | Cost |
+---------+--------+------+
| A | 50 | 2.50 |
+---------+--------+------+
| A | 100 | 2.00 |
+---------+--------+------+
| A | 200 | 1.75 |
+---------+--------+------+
| B | 200 | 1.85 |
+---------+--------+------+
| B | 400 | 1.50 |
+---------+--------+------+
| B | 600 | 1.35 |
+---------+--------+------+
ルックアップテーブルであり、結果は重量のために表2から最も近いコストを適用する< =表1
**Result**
+---------+---------+--------+------+
| Product | Carrier | Weight | Cost |
+---------+---------+--------+------+
| Z | B | 600 | 1.35 |
+---------+---------+--------+------+
| Z | B | 350 | 1.50 |
+---------+---------+--------+------+
| Y | A | 150 | 1.75 |
+---------+---------+--------+------+
| X | A | 75 | 2.00 |
+---------+---------+--------+------+
| Y | B | 10 | 1.85 |
+---------+---------+--------+------+
| X | A | 40 | 2.50 |
+---------+---------+--------+------+
伝統的な結合を使用すると、最初の行はコストが600を「表2」にリストされている重みとなります。
SELECT a.Product
,a.Carrier
,a.Weight
,b.Cost
FROM dbo.table1 a
LEFT JOIN Table2 b ON a.Carrier = b.Carrier AND a.Weight = b.Weight
+---------+---------+--------+------+
| Product | Carrier | Weight | Cost |
+---------+---------+--------+------+
| Z | B | 600 | 1.35 |
+---------+---------+--------+------+
| Z | B | 350 | NULL |
+---------+---------+--------+------+
| Y | A | 150 | NULL |
+---------+---------+--------+------+
| X | A | 75 | NULL |
+---------+---------+--------+------+
| Y | B | 10 | NULL |
+---------+---------+--------+------+
| X | A | 40 | NULL |
+---------+---------+--------+------+
希望の結果を得るために、上記のクエリに変更を加えたいと考えています。
FYI:私はあなたが条件に一致する最初のレコードを探す必要のMicrosoft SQL Serverに2014