我确定我在这里错过了一些简单的东西。我有一个查询,它返回的数据集如下所示:
**OrderNum Address**
12345 1405 W Hollywood
12346 1555 3rd Ave
22334 PO Box 1467
22334 1327 14th Ln S.
我现在想要的是计算每个订单我只看到一个地址的位置,或者如果有多个地址,只需像这样显示"多个">
**OrderNum Address**
12345 1405 W Hollywood
12346 1555 3rd Ave
22334 Multiple
如果我尝试在诸如"计数时(OrderNum(> 1 ..."之类的情况下执行此操作。然后我必须按地址分组,它不起作用。其他想法?我的大脑被困在这个上面,所以我需要轻推一下。谢谢!
select ordernum,
case when count(*) > 1
then 'multiple'
else max(address)
end as address
from your_table
group by ordernum
您需要聚合所有不作为分组依据的列。我猜你没有使用max(address)
或类似的东西。
使用窗口函数:
select distinct ordernum,
(case when AddrCount > 1 then 'Multiple' else address end) as address
from (select *, count(*) over (partition by OrderNum) as AddrCount
from table
) t;