我有一个如下表。当Type = Forecast时,将填充所有值。 当Type = Sales时,所有区域均为NULL。
回顾一下“预测”,每个ID只能映射到一个地区。但是,在某些情况下,可以将2个区域映射到一个ID。如果发生这种情况,那么我只想关注第一个区域。
还请注意,Type = Forecast中可能存在ID,而Type = Sales中却没有ID,
TABLE 1
ID Region Type
123xy ASPAC Forecast
123xy ASPAC Forecast
456za ASPAC Forecast
456za EMEA Forecast
789sw LATAM Forecast
789sw EMEA Forecast
999ww NORTH Forecast
123xy Sales
123xy Sales
456za Sales
789sw Sales
111xx Sales
我的预期输出将是:
TABLE 2: Expected Output
ID Region Type
123xy ASPAC Forecast
123xy ASPAC Forecast
456za ASPAC Forecast
456za EMEA Forecast
789sw LATAM Forecast
789sw EMEA Forecast
999ww NORTH Forecast
123xy ASPAC Sales
123xy ASPAC Sales
456za ASPAC Sales
789sw LATAM Sales
789sw LATAM Sales
111xx Sales
理想情况下,期望的输出将使用Sales中Region的新填充值更改/更新表。 但是,我不确定如何以最有效的方式进行此操作?我当时正在考虑将类型=预测的所有数据插入到另一个表中,按ID和区域将它们分组,删除所有重复项,然后进行LEFT JOIN TABLE 1 vs TEMP表。
答案 0 :(得分:0)
获取ID的最小值,将其再次与表连接,并为那些未定义Region的字段使用最小值行。
select t1.ID, ifnull(t1.Region, t.Region), t1.Type
from table1 t1
join (
select t2.Region, min(ID) as ID
from table1 t2
group by t2.Region
) t on t.ID=t1.ID
请参见SQLFiddle