我有一个表中的项目列表。这些项目可以是两种类型' A'或者' M'
表1
Retry
我需要另一列来显示计量单位(UoM)。此列位于两个不同的表中。如果项目是类型M,UoM位于表A中,另一方面如果是类型A,则UoM位于表B中。
表A
---------------------------------------------------------
| 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 |
--------------------------------------------------------
表B
-----------------------------------------------
| 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 |
-----------------------------------------------
我需要这样的东西。
-----------------------------------------------
| Code | Description | Currency | UoM |
|----------------------------------------------
|CAY003_M| Some text here| USD | kg |
-----------------------------------------------
有一个小问题。可能有2个具有相同代码但具有不同类型的项目,因此它们可能具有另一个UoM。例如。
-----------------------------------------------------------------
| 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 |
-----------------------------------------------------------------
我正在使用SQL Server 2012,我尝试了以下代码。它与第一个内部连接一起工作,所以我试图添加另一个,但似乎这不是这样做的方式。
-----------------------------------------------------------------
| 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 |
-----------------------------------------------------------------
有人可以帮助我吗?
答案 0 :(得分:0)
以下是使用两个Left Join
s:
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'