求~~~~~~Group by 语句(挺有意思的)
ID BarCode BoxNo(大箱条码) ProduceNo GoodsID(货号)Meter UnitID(单位ID)
1 200001 200001 100000 001 34 1
2 200002 200001 100000 001 34 1
3 200003 200001 100001 002 6 1
4 200004 200002 100001 001 43 1
上面这样一个表(一条记录就是一个条码,也就是一个货物),
表结构为:
ID:关键字段
BarCode:唯一索引(小盒子条码)
BoxNo:大箱条码(用来装小盒子的)
ProduceNo:生产制单号
GoodsID:货物ID
Meter:每一件货有多少米
现在我显示的时候:
select count(*) as [件数], GoodsID as [货号], ProduceNo as [生产制单号],
sum(Meter) as [米数], Max(TblUnit.UnitName) as [单位]
from Table1
left join TblUnit on TblUnit.UnitID=Table1.UnitID
group by GoodsID, ProduceNo, ColorID, UnitID, BoxNo
现在是:
件数 货号 生产制单号 米数 颜色 单位
多加一列,叫包装情况 (实际上BarCode就是一个小箱,包装的时候是N个小箱[就是N个条码BarCode放在大箱BoxNo里])
目的是这样的:
盒数 货号 生产制单号 米数 颜色 单位 包装情况
3 xxx xxx xxx xxx xxx 2*32+44=108
包装情况的意思就是根据group by GoodsID, ProduceNo, ColorID, UnitID, BoxNo
这个分组的来计算 2是这一条记录有2盒为32M 44是另一盒为44米 加起来为1000米
全写出来就是:2盒*32米+1盒*44米=108米
最后这个包装情况要怎么写?
------解决方案--------------------可以写一个用户定义函数来生成。
------解决方案-----------------------try
create function f1(@id varchar(10))
as
begin
declare @cnt int
select @cnt = 0
select @cnt=@cnt+count(Meter)*Meter from TblUnit where GoodsID = @id group by Meter
return @cnt
end
select count(*) as [件数],
GoodsID as [货号],
ProduceNo as [生产制单号],
sum(Meter) as [米数],
Max(TblUnit.UnitName) as [单位],
[包装情况]=dbo.f1(GoodsID)
from Table1
left join TblUnit on TblUnit.UnitID=Table1.UnitID
group by GoodsID, ProduceNo, ColorID, UnitID, BoxNo
------解决方案--------------------create