需求:查询出订单中金额满899元的客户,赠送礼品,相同不能重复赠送
分析:有些客户可能会有多个订单超过899,而且相同的昵称也有可能有不同的收货人,地址等,所以不能单纯的用distinct
网上搜了下:大致思路如下,给查询的数据加一个自增列,然后碰到相同的昵称则取其中一个即可。
1 select distinct buyer_nick,receiver_name,ISNULL(receiver_state,'')+','+ISNULL(receiver_city,'')+','+ISNULL(receiver_district,'')+','+ISNULL(receiver_address,'')+',' addr,'' '1',receiver_mobile,'CL60035/1s*1' sku,'' post code,'满899送60035/1s' memo, identity(int,1,1) rownumber into #t 2 from orders 3 where 4 (Payment-isnull(post_fee,0))>=899 and pay_time between '2013-01-01' and '2013-09-14' 5 and seller_nick='**旗舰店' 6 and status not like '%closed%' 7 and is_main=1 8 9 select * from #t where rownumber in( 10 select MAX(rownumber) rownumber from #t a where a.buyer_nick=#t.buyer_nick group by a.buyer_nick11 ) 12 drop table #t
最后一段也可以改成
1 select * from #t where rownumber in( 2 select top 1 rownumber from #t a where a.buyer_nick=#t.buyer_nick 3 )
两者在执行效率上也相差无几。
浙公网安备 33010602011771号