各位高手看看这个查询语句如何写!
有数据表:B_HP;
内容如下:
产品 , 数量 , 箱号
A , 2 , 1
A , 2 , 2
A , 2 , 3
B , 1 , 4
B , 1 , 4
C , 3 , 5
C , 3 , 6
查询结果需要将箱号统计出来:如
产品 , 数量 , 箱号范围 , 箱数
A , 6 , 1-3 , 3
B , 2 , 4 , 1
C , 6 , 5-6 , 2
请高手帮忙看下,如何将取得箱号的范围,和当前产品的箱数数量????
[解决办法]
select 产品, 数量=sum(数量), 箱号范围=case when max(箱号)=min(箱号) then convert(varchar(20),max(箱号)) else convert(varchar(20),min(箱号))+'-'+convert(varchar(20),max(箱号)) end, 箱数=max(箱号)-min(箱号)+1from B_HPgroup by 产品order by 产品
[解决办法]
if object_id('[tb]') is not null drop table [tb]gocreate table [tb]([产品] varchar(1),[数量] int,[箱号] int)insert [tb]select 'A',2,1 union allselect 'A',2,2 union allselect 'A',2,3 union allselect 'B',1,4 union allselect 'B',1,4 union allselect 'C',3,5 union allselect 'C',3,6goselect 产品, sum(数量) as 数量, 箱号范围=case when min(箱号)=max(箱号) then ltrim(min(箱号)) else ltrim(min(箱号))+'-'+ltrim(max(箱号)) end, count(distinct 箱号) as 箱数from tbgroup by 产品/**产品 数量 箱号范围 箱数---- ----------- ------------------------- -----------A 6 1-3 3B 2 4 1C 6 5-6 2(3 行受影响)**/