2017-07-21 18 views
2

1つのテーブルにアイテムのリストがあります。これらのアイテムは、2種類の「A」または「M」3つのテーブルをマージするクエリSQL SERVER

表1

--------------------------------------------------------- 
| Code | Type | Description | Quantity | Cost | 
|-------------------------------------------------------| 
|BAG001_M| M | Some text here|  2.0 | 40.0 | 
|BAG002_M| M | Some text here|  5.0 | 69.0 | 
|CAY003_M| A | Some text here|  8.0 | 10.0 | 
|CFI002_M| M | Some text here|  8.0 | 10.0 | 
-------------------------------------------------------- 

のものであってもよい私は、メジャー(UOM)の単位を示すために別の列を持っている必要があります。この列は2つの異なる表にあります。それはUOMは表B

表A

----------------------------------------------- 
| Code | Description | Currency | UoM | 
|---------------------------------------------- 
|BAG001_M| Some text here|  MXN | m2 | 
|BAG002_M| Some text here|  USD | lt | 
|CFI002_M| Some text here|  MXN | m3 | 
----------------------------------------------- 

表Bに位置しているタイプの場合アイテムはMを入力UOMは、一方では、表Aに位置している場合

----------------------------------------------- 
| Code | Description | Currency | UoM | 
|---------------------------------------------- 
|CAY003_M| Some text here|  USD | kg | 
----------------------------------------------- 

このようなものが必要です。

----------------------------------------------------------------- 
| Code | Type | Description | Quantity | Cost | UoM | 
|---------------------------------------------------------------| 
|BAG001_M| M | Some text here|  2.0 | 40.0 | m2 | 
|BAG002_M| M | Some text here|  5.0 | 69.0 | lt | 
|CAY003_M| A | Some text here|  8.0 | 10.0 | kg | 
|CFI002_M| M | Some text here|  8.0 | 10.0 | m3 | 
----------------------------------------------------------------- 

小さな問題があります。同じコードであるがタイプが異なる2つのアイテムが存在する可能性があるため、別のUoMを持つ可能性があります。例えば。

----------------------------------------------------------------- 
| Code | Type | Description | Quantity | Cost | UoM | 
|---------------------------------------------------------------| 
|AAA001_M| M | Some text here|  2.0 | 40.0 | m2 | 
|AAA001_M| A | Some text here|  5.0 | 20.0 | lt | 
----------------------------------------------------------------- 

私はSQL Server 2012を使用しており、次のコードを試しました。それは最初の内部結合で働いたので、別のものを追加しようとしましたが、これはそれを行う方法ではないようです。

SELECT 
    CODE 
    ,Type 
    ,AD.DESCRIPTION 
    ,QUANTITY 
    ,AD.[COSTS] 
    ,A.UOM 
FROM 
    Table1 AS AD INNER JOIN TableA AS A 
ON 
    CODE = CASE 
         WHEN Type = 'M' 
          THEN A.CODE 
        END 
    INNER JOIN TableB AS B 
ON 
    Code = CASE 
          WHEN Type = 'A' 
           THEN B.CODE 
         END 

誰かが私を助けてくれますか?ここで

答えて

0

は2 Left Join秒でこれを行う方法です:

Select  AD.CODE, 
      AD.Type, 
      AD.DESCRIPTION, 
      AD.QUANTITY, 
      AD.[COSTS], 
      Coalesce(A.UOM, B.UOM) As UOM 
From  Table1 AD 
Left Join TableA A On A.Code = AD.Code 
         And AD.Code = 'M' 
Left Join TableB B On B.Code = AD.Code 
         And AD.Code = 'A' 

Coalesce()は二つの結果から、最初の非NULL値を選択します。項目が複数のコードがあり、両方の結果を必要とする場合には


、あなたの代わりにUNION ALLを使用することができます。

Select AD.CODE, 
     AD.Type, 
     AD.DESCRIPTION, 
     AD.QUANTITY, 
     AD.[COSTS], 
     A.UOM 
From Table1 AD 
Join TableA A On A.Code = AD.Code 
Where AD.Code = 'M' 
Union All 
Select AD.CODE, 
     AD.Type, 
     AD.DESCRIPTION, 
     AD.QUANTITY, 
     AD.[COSTS], 
     B.UOM 
From Table1 AD 
Join TableB B On B.Code = AD.Code 
Where AD.Code = 'A' 
+0

をそれは完全に働きました。 ありがとうございます! –

関連する問題