读书人

痛苦一个困扰已久的有关问题望指点

发布时间: 2012-01-24 23:11:54 作者: rapoo

痛苦,一个困扰已久的问题,望大虾指点,不胜感激!!!
销售出库分录:
分录号 箱号 物料名称 规格型号 批号 单位 数量 箱数
1 1 A T1 001 KG 100 1
2 2 A T1 001 KG 80 1
3 3 A T1 001 KG 95 1
4 4 A T1 001 KG 110 1
5 5 A T1 001 KG 100 1
6 6 A T1 001 KG 80 1
7 7 A T1 001 KG 80 1
8 8 A T1 001 KG 100 1
9 1 B T2 002 KG 100 1
10 2 B T2 002 KG 90 1
11 3 B T2 002 KG 85 1


12 4 B T2 002 KG 100 1
13 5 B T2 002 KG 100 1
14 6 B T2 002 KG 80 1
15 7 B T2 002 KG 90 1
16 1 C T3 003 KG 100 1
17 2 C T3 003 KG 100 1
18 3 C T3 003 KG 90 1
19 4 C T3 003 KG 120 1
20 5 C T3 003 KG 100 1
21 6 C T3 003 KG 100 1

现要实现如下效果:

物料名称: A 规格型号: T1 批号: 001 单位: KG
箱号 数量 箱号 数量 箱号 数量 箱号 数量
1 100 2 80 3 95 4 110


5 100 6 80 7 80 8 100
物料名称: B 规格型号: T2 批号: 002 单位: KG
箱号 数量 箱号 数量 箱号 数量 箱号 数量
1 100 2 90 3 85 4 100
5 100 6 80 7 90
物料名称: C 规格型号: T3 批号: 003 单位: KG
箱号 数量 箱号 数量 箱号 数量 箱号 数量
1 100 2 100 3 90 4 100
5 100 6 100




[解决办法]
create table 出库表(分录号 int identity(1,1), 箱号 int, 物料名称 varchar(10),
规格型号 varchar(10), 批号 varchar(10), 单位 varchar(10), 数量 int, 箱数 int)
insert 出库表 select 1, 'A ', 'T1 ', '001 ', 'KG ',100,1
insert 出库表 select 2, 'A ', 'T1 ', '001 ', 'KG ',80,1
insert 出库表 select 3, 'A ', 'T1 ', '001 ', 'KG ',95,1
insert 出库表 select 4, 'A ', 'T1 ', '001 ', 'KG ',110,1
insert 出库表 select 5, 'A ', 'T1 ', '001 ', 'KG ',100,1
insert 出库表 select 6, 'A ', 'T1 ', '001 ', 'KG ',80,1
insert 出库表 select 7, 'A ', 'T1 ', '001 ', 'KG ',80,1
insert 出库表 select 8, 'A ', 'T1 ', '001 ', 'KG ',100,1
insert 出库表 select 1, 'B ', 'T2 ', '002 ', 'KG ',100,1
insert 出库表 select 2, 'B ', 'T2 ', '002 ', 'KG ',90,1
insert 出库表 select 3, 'B ', 'T2 ', '002 ', 'KG ',85,1
insert 出库表 select 4, 'B ', 'T2 ', '002 ', 'KG ',100,1
insert 出库表 select 5, 'B ', 'T2 ', '002 ', 'KG ',100,1
insert 出库表 select 6, 'B ', 'T2 ', '002 ', 'KG ',100,1
go

select
物料名称, 规格型号, 批号, 单位,
cast(max(case when 箱号%4=1 then 箱号 else ' ' end) as varchar(10)) as [箱号(1)],
cast(max(case when 箱号%4=1 then 数量 else ' ' end) as varchar(10)) as [数量(1)],
cast(max(case when 箱号%4=2 then 箱号 else ' ' end) as varchar(10)) as [箱号(2)],


cast(max(case when 箱号%4=2 then 数量 else ' ' end) as varchar(10)) as [数量(2)],
cast(max(case when 箱号%4=3 then 箱号 else ' ' end) as varchar(10)) as [箱号(3)],
cast(max(case when 箱号%4=3 then 数量 else ' ' end) as varchar(10)) as [数量(3)],
cast(max(case when 箱号%4=0 then 箱号 else ' ' end) as varchar(10)) as [箱号(4)],
cast(max(case when 箱号%4=0 then 数量 else ' ' end) as varchar(10)) as [数量(4)]
from
出库表
group by
物料名称, 规格型号, 批号, 单位,(箱号-1)/4+1

drop table 出库表

/*
物料名称规格型号批号单位箱号(1)数量(1)箱号(2)数量(2)箱号(3)数量(3)箱号(4)数量(4)
-----------------------------------------------------
AT1001KG11002803954110
AT1001KG51006807808100
BT2002KG11002903854100
BT2002KG510061000000
*/
[解决办法]
LZ要直接要在SQL里实现这个结果?
查看表格还是Print出来啊?

结果集为 8 列 N 行,使用二重游标可以实现施主所需要的结果。

物料名称: A 规格型号: T1 批号: 001 单位: KG
箱号 数量 箱号 数量 箱号 数量 箱号 数量
1 100 2 80 3 95 4 110
5 100 6 80 7 80 8 100



[解决办法]
还是用数据库与报表工具一起实现吧

读书人网 >SQL Server

热点推荐