我有一系列记录,它们具有多个备用bin定义(BIN_BIN)。
举例来说:
x1c 0d1x的数据
我有一个查询,当只有一个备用位置时,它可以工作。当有多个备用位置时,它会失败。我已经尝试了几种方法,例如使用IN和替换EXISTS,使用RANK和PARTITION,但都没有成功。我必须合并数千行,这些行具有不同数量的匹配PART_NO,MFG和LOCATION记录,这些记录具有不同的BIN_BLOG值。
update PART_LOCATION a
set alt_bin_loc_1 =
(
select bin_loc
from PART_LOCATION b where a.part_no = b.part_no and a.mfg = b.mfg and a.location = b.location and a.bin_loc <> b.bin_loc
and a.temp_id < b.temp_id
)
where exists
(
select bin_loc
from PART_LOCATION b where a.part_no = b.part_no and a.mfg = b.mfg and a.location = b.location and a.bin_loc <> b.bin_loc
and a.temp_id < b.temp_id
);
字符串
要将ALT_BIN_XXX位置与主记录中具有最低TEMP_ID的PART_ID/PART_NO、MFG、LOCATION上的匹配记录合并,然后删除下一个BIN_BIN不匹配的记录,需要完成的操作。如以下步骤所示。
第一次迭代结果:
第二次迭代结果:
第三次迭代结果:
2条答案
按热度按时间6l7fqoea1#
您可以在一个
MERGE
语句中完成所有操作,方法是使用解析函数查找最低温度行,然后对其他行进行排序并旋转以查找alt. bin位置:字符串
其中,对于样本数据:
型
然后,在
MERGE
之后,该表包含:| 部件ID|零件编号|Mfg|位置|联系我们|ALT_BIN_LOC 1| ALT_BIN_LOC 2| ALT_BIN_LOC 3|温度ID|
| --|--|--|--|--|--|--|--|--|
| 950 |A1234| Mfg1| 75309 |A07| LFRONT| LTOP| RFRONT| 123 |
USING
子句中使用SELECT
。*fiddle
yvgpqqbh2#
不建议将值放在多个列中,如果出现的次数更多,则最终会有许多列。您可以将它们分组到单个列中,并为每个出现的值使用分隔符。您可以使用LISTAGG如下所示,
字符串