从一个表中检索记录,其中四列中的三列中的数据相同?

时间:2013-11-21 05:08:50

标签: sql

情景:

一个名为“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

在上面的示例中,我希望系统返回第一列匹配的行。这将允许将三个项目合并到一个位置。

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