我有一个复杂的问题,我无法终生弄清楚脑海中的逻辑。
我正在尝试解决构建查询以报告重大事件的正确日期的问题。从本质上讲,我的公司正在尝试通过查看何时购买(数量+)零件,何时制造(数量+)零件,何时销售(数量-)零件或何时使用该零件建造更高的零件来跟踪库存管理。组装零件(数量-)。
这里有4种事件,每种都有自己的唯一标识符,每种都有发生该事件的日期。
(请注意,我已经删除了一些不相关的字段名称)。
我要完成的工作是使用CASE...WHEN
语句根据当前行的外键是否选择正确的日期。
因此具有以下作用:
CASE
WHEN Type = "Purchase Order" THEN (SELECT Date FROM Events WHERE Events.Number = Happenings.PO_ID)
WHEN TYPE = "Make Order" THEN (SELECT Date FROM Events WHERE Events.Number = Happenings.MO_ID)
WHEN TYPE = "Sale" THEN (SELECT Date FROM Events WHERE Events.Number = Happenings.Sale_ID)
WHEN TYPE = "Create Order" THEN (SELECT Date FROM Events WHERE Events.Number = Happenings.CO_ID)
ELSE NULL AS Event_Date
不幸的是,我不能发布太多数据,因为它是公司专有的,但这就是我要完成的要旨。当我当前行包含唯一标识符时,使用CASE...WHEN
从另一个表中正确选择一个值。
答案 0 :(得分:2)
尝试加入条件的情况
select e1.date
from events e1
inner join happenings h2
on e1.Number = case when e1.type = 'Purchase' then h2.PO_ID
when e1.type = 'Make' then h2.MO_ID
...
end
答案 1 :(得分:0)
尝试使用nvl功能 用于组织事件表。 NVL(PO_ID,NVL(MO_ID,NVL(CO_ID,NVL(Sale_ID,0))))AS IDS
然后
Events.Number = IDS
希望有帮助