需要查询才能获得具体结果

时间:2018-04-13 10:42:53

标签: sql

我有下表。

locationName    itemnumber  pickRouteOrder
     loc1            item1           10
     loc2            item2           20
     loc2            item3           20
     loc4            item5           30
     no-loc          item6           99
     no-loc          item7           99

如果locationName = noLoc,则需要显示所有记录。 如果locationame像loc2一样重复,则显示1条记录。 我想要结果如下。

locationName    itemnumber  pickRouteOrder
     loc1            item1           10
     loc2            item2           20
     loc4            item5           30
     no-loc          item6           99
     no-loc          item7           99

我需要使用哪个查询才能获得所需的结果。

1 个答案:

答案 0 :(得分:0)

这是一种方法:

select locationName, itemnumber, pickRouteOrder
from t
where locationName = 'NoLoc'
union all
select locationName, min(itemnumber), min(pickRouteOrder)
from t
where locationName <> 'NoLoc'
group by locationName;

另一种方法使用row_number()

select locationName, itemnumber, pickRouteOrder
from (select t.*,
             row_number() over (partition by locationName order by locationName) as seqnum
      from t
     ) t
where seqnum = 1 or locationName = 'NoLoc';