日期:2014-05-17  浏览次数:20448 次

SQL分组序号,求高手帮助


我要写一个sql实现图片中的最后一列的效果

根据前三列做group by,当提货地点+成品货权+发票抬头相同的时候生成“汇总号”相同,下一组则加1
我用ROW_NUMBER () OVER 无法实现
求高手帮助

------解决方案--------------------
应是用dense_rank()实现.

create table net
(提货地点 varchar(20),成品货权 varchar(10),发票抬头 varchar(10),
 物料编号 varchar(20),数量 int,单位 varchar(5),价格 int)

insert into net
 select '济南成品库','1110','','ASRRM0001240K',3,'件',1300 union all
 select '济南成品库','1110','','ASRRM0002240K',1,'件',1000 union all
 select '济南成品库','1110','东天','ASRRM0001240K',2,'件',650 union all
 select '济南成品库','1110','东天','ASRRM0002240K',2,'件',1000 union all
 select '济南成品库','1110','昊海','ASRRM0001240K',1,'件',650 union all
 select '济南成品库','1110','昊海','ASRRM0002240K',1,'件',1000
 

with t as
(select *,
        dense_rank() over(order by 提货地点+成品货权+发票抬头) 'rn'
 from net)
select 提货地点,成品货权,发票抬头,物料编号,数量,单位,价格,
       replicate('0',2-len(rn))+rtrim(rn) '汇总号'
 from t

/*
提货地点                 成品货权    发票抬头     物料编号               数量         单位    价格          汇总号
-------------------- ---------- ---------- -------------------- ----------- ----- ----------- -----------
济南成品库                1110                  ASRRM0001240K        3           件     1300        01
济南成品库                1110                  ASRRM0002240K        1           件     1000        01
济南成品库                1110       东天