情景:
一个名为“Items”的表
六列:“Item_Num”,“Item_Name”,“Status”,“Aisle”,“Bin”& “数量”
目标是确保具有相同“状态”的“Item_Num”/“Item_Name”位于相同的“Aisle”和“Bin”位置;但是,可能存在一个实例,其中相同“Item_Num”/“Item_Name”和“Status”的两个框可以位于单独的“Aisle”和Bin“位置。我希望能够运行查询以使系统返回“Item_Num”,“Item_Name”和“Status”相同的记录,但“Aisle”和“Bin”数据不匹配。
Item_Num | Item_Name | Status | Aisle | Bin | Qty
5206 | Popcorn | A | 1 | 2 | 5
5206 | Popcorn | A | 1 | 3 | 4
5206 | Popcorn | A | 2 | 2 | 5
5206 | Popcorn | B | 1 | 4 | 2
在上面的示例中,我希望系统返回第一列匹配的行。这将允许将三个项目合并到一个位置。
答案 0 :(得分:0)
试试这个:
select a.Item_num,a.Item_Name,a.Status,a.Aisle,a.Bin,a.qty from table a inner join table b
ON a.Item_num=b.Item_num and a.Item_Name=b.Item_Name and a.Status=b.Status and a.Aisle <> b.Aisle and a.Bin <> b.Bin
答案 1 :(得分:0)
首先找到哪个项目记录组有多个过道,bin值。然后返回属于这些组的所有行。
with g as
( select item_num, item_name, status,
count(distinct aisle) as aisles,
count(distinct bin) as bins
from items
group by item_num, item_name, status
having count(distinct aisle) > 1
or count(distinct bin) > 1
)
select i.item_num, i.item_name, i.status,
i.aisle, i.bin,
sum(1.qty) tot_qty
from items i
join g on (i.item_num, i.item_name, i.status)
=(g.item_num, g.item_name, g.status)
group by item_num, item_name, status, aisle, bin