我一直在试图弄清楚如何将一个表加入到我加入的其他表中,但是表的设置方式,EventTable只有在某些事件发生时才有OrderID 。否则为空。
事件表
EventID EventName OrderID DateTS
1 Rec 1 date1
2 Track NULL date2
3 Run NULL date3
事件项表
EventID Column2 OrderID
1 Other 1
2 stuff 2
3 beer 3
订单表
OrderID orderRef ProdID
1 1234 1
2 1233 1
3 1232 3
现在我一直在尝试获取所有事件行,其中包含我正在寻找的所有事件。我需要做的是能够允许用户使用 Tableau,它将过滤orderRef列以显示所有发生的事件。
我对 SQL 查询很陌生,我想的每行逻辑是 if 语句,但不知道它在 SQL 中是如何工作的。
SELECT OrderTable.orderRef, EventTable.DateTS, EventTable.EventName
If EventTable.OrderID column isNull, then
FROM EventItemTable
join EventItemTable ON EventItemTable.OrderID = EventTable.OrderID
join OrderTable ON OrderTable.OrderID = EventItemTable.OrderID
ELSE
FROM EventItemTable
left join OrderTable ON OrderTable.OrderID = EventTable.OrderID
在我看来,我认为 orderRef 将被填充到整个表中并且没有空值或被过滤掉。我仍然可以拥有所有其他列,但在 else 条件下,行将只填充 NULL。我一直在寻找子查询和其他功能来尝试,但没有看到任何似乎能够做到这一点的东西。我正在使用 Microsoft SQL 2005(我相信)
编辑
这就是我最终得到的结果,将所有 OrderID 放在一列中以加入 @AlexJohnson 建议。我现在的问题是,一对夫妇在每个订单参考的行中有重复的制造事件 ID。不确定 ISNULL 是否导致该问题
SELECT met.met_ManufacturingEventID
,met.met_OrderID
,ori.ori_OrderID
,mfi.mfi_OrderID
,mfi.mfi_LastEvent
,mfi.mfi_RunNumber
,mfi.mfi_InputOrder
,meo.meo_ManufacturingOperationName
,mes.mes_ManufacturingStationName as StationName
,mes.mes_StationStatusName as StationStatus
,met.met_EventDate as EventDate
-- ,oie.oie_EventDate
,met.met_ToothID
,met.met_Comment as metComment
,met.met_ManufacturingOrderNumber
-- ,ISNULL(mfi.mfi_OrderID,met.met_OrderID) as OrderID
,ord.ord_OrderReference as OrderRef
FROM [dbo].[ManufacturingEvents] met
LEFT JOIN [dbo].[ManufacturingEventOrderItems] mfi
ON mfi.mfi_ManufacturingEventID = met.met_ManufacturingEventID
LEFT JOIN [dbo].[OrderItems] ori
ON ori.ori_OrderItemID = mfi.mfi_OrderItemID
LEFT JOIN [AtlantisProductionSystem_Prod_US].[dbo].[Orders] ord
ON ord.ord_OrderID = ISNULL(mfi.mfi_OrderID,met.met_OrderID)
LEFT JOIN dbo.ManufacturingStations mes
ON mes.mes_ManufacturingStationID = met.met_ManufacturingStationID
JOIN dbo.ManufacturingOperations meo
ON meo.meo_ManufacturingOperationID = mes.mes_ManufacturingOperationID