有如下数据:
库存表A
物品分类 物品仓位 数量
电视 A001 50
电视 A002 30
冰箱 A001 25
冰箱 A003 60
微波炉 A001 5
冰箱 A002 10通过以上数据,形成下面报表
物品分类 仓位分类数量 物品分类数量
电视 (1/3个A001+1/2个A002) 80
冰箱 (1/3个A001+1/2个A002+1个A003) 95
微波炉 1/3个A001 5 以上报表数据计算方法:
数据分类:
取库存表A中的全部物品分类
仓位分类数量:
如果一个仓位上放置的是一个分类物品则计算为1,如果一个托板放置的是2或n个分类的物品则计算为1/2或1/n个托板
物品分类数量:
汇总库存表A中的物品分类中的数量请教为实现上述结果,SQL语句该如何写?多谢!
库存表A
物品分类 物品仓位 数量
电视 A001 50
电视 A002 30
冰箱 A001 25
冰箱 A003 60
微波炉 A001 5
冰箱 A002 10通过以上数据,形成下面报表
物品分类 仓位分类数量 物品分类数量
电视 (1/3个A001+1/2个A002) 80
冰箱 (1/3个A001+1/2个A002+1个A003) 95
微波炉 1/3个A001 5 以上报表数据计算方法:
数据分类:
取库存表A中的全部物品分类
仓位分类数量:
如果一个仓位上放置的是一个分类物品则计算为1,如果一个托板放置的是2或n个分类的物品则计算为1/2或1/n个托板
物品分类数量:
汇总库存表A中的物品分类中的数量请教为实现上述结果,SQL语句该如何写?多谢!
仓位分类数量:
如果一个仓位上放置的是一个分类物品则计算为1,如果一个仓位放置的是2或n个分类的物品则计算为1/2或1/n个仓位To xuam:还需要什么条件呢?
[物品分类] [nvarchar](50),
[物品仓位] [nvarchar](50) ,
[数量] [numeric](28, 8) ,
) ON [PRIMARY]
insert into Test123 values('电视','A001',50)
insert into Test123 values('电视','A002',30)
insert into Test123 values('冰箱','A001',25)
insert into Test123 values('冰箱','A003',60)
insert into Test123 values('微波炉','A001',5)
insert into Test123 values('冰箱','A002',10)
select A.*,'1/'+ltrim(B.仓位数量) as 仓位分类数量
from A into ls
inner join (select 物品仓位,仓位数量=count(1) from A group by 物品仓位) B
on A.物品仓位=B.物品仓位 --自定义函数用来组合相同物品分类的仓位分类数量
create function dbo.fn_fl(@物品分类 varchar(100)) returns varchar(8000)
as
begin
declare @仓位分类数量 varchar(8000)
set @仓位分类数量=''
select @仓位分类数量=@仓位分类数量+仓位分类数量 from ls where 物品分类=@物品分类
end--调用自定义函数查询
select 物品分类,dbo.fn_fl(物品分类),sum(数量) from tb group by 物品分类
--删除临时表
drop table ls
不好意思,是我没有描述清楚。
仓位分类数量是数值型,“1/3个A001+1/2个A002”是为了说明仓位分类数量这个字段的计算公式,“1/3个A001+1/2个A002”的结果应该是0.33+0.5=0.83
--建立一个临时表(视图也可以),增加的一列仓位分类数量用来保存“1/3个A001”
select A.*,'1/'+ltrim(B.仓位数量) as 仓位分类数量 into ls
from Test123 A
inner join (select 物品仓位,仓位数量=count(1) from Test123 group by 物品仓位) B
on A.物品仓位=B.物品仓位
go
--自定义函数用来组合相同物品分类的仓位分类数量
create function dbo.fn_fl(@物品分类 varchar(100)) returns varchar(8000)
as
begin
declare @仓位分类数量 varchar(8000)
set @仓位分类数量=''
select @仓位分类数量=@仓位分类数量+仓位分类数量+'个'+物品仓位+'+' from ls where 物品分类=@物品分类
set @仓位分类数量=left(@仓位分类数量,len(@仓位分类数量)-1)
return @仓位分类数量
end
go
--调用自定义函数查询
select 物品分类,dbo.fn_fl(物品分类),sum(数量) from Test123 group by 物品分类
--删除临时表
drop table ls
drop function dbo.fn_fl/*
(所影响的行数为 6 行)
物品分类
-------------------------------------------------- ---------------------------------------------------------
冰箱 1/3个A001+1/2个A002+1/1个A003 95.00000000
电视 1/3个A001+1/2个A002 80.00000000
微波炉 1/3个A001 5.00000000
(所影响的行数为 3 行)
*/
(select A.*,cast(1.0/(B.仓位数量) as decimal(18,2)) as 仓位分类数量
from Test123 A
inner join (select 物品仓位,仓位数量=count(1) from Test123 group by 物品仓位) B
on A.物品仓位=B.物品仓位) C
group by 物品分类
希望下次简单的事情描述清楚点
use demo
go
create table sale
(customer varchar(10) not null,
product varchar(20) not null,
number int not null
)
go
--add data to table
insert into sale values('张三','自行车',3)
insert into sale values('张三','电视机',2)
insert into sale values('张三','自行车',5)
insert into sale values('李四','自行车',3)
insert into sale values('李四','电视机',3)
insert into sale values('李四','电视机',4)
insert into sale values('李四','自行车',2)select * from sale pivot (sum(number) for product in(自行车,电视机)) as a
行列转换 加group功能..