求SQL语句的写法,学习.....
create table stock
(
id int identity(1,1),
type varchar(20),--材料类别
name varchar(20),--材料名称
xh varchar(20),--材料型号
c int ,--长度
k int ,--宽度
h int ,--厚度
gg varchar(20),--材料规格
dw varchar(20),--计量单位
dj int, --材料单价
sl int, --出入库数量
rq datetime ,--日期
flags char(1) --出入库标志(1为入库,0为出库)
)
/*板材入库数据*/
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',3000,10,'2006-1-1','1'
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',3500,8,'2006-1-1','1'
insert into stock select '板材','钢板',null,6,2,8,'6*2*8','吨',3000,15,'2006-1-1','1'
insert into stock select '板材','冷轧板',null,10,3,12,'10*3*12','吨',4000,20,'2006-1-1','1'
/*型材入库数据*/
insert into stock select '型材','槽钢','16#',10,null,null,'16#*10','吨',3000,10,'2006-1-1','1'
insert into stock select '型材','槽钢','12#',10,null,null,'12#*10','吨',3000,10,'2006-1-1','1'
/*板材出库数据*/
insert into stock select '板材','钢板',null,2,2,5,'2*2*5','吨',3000,1,'2006-1-2','0'
insert into stock select '板材','钢板',null,3,2,5,'3*2*5','吨',3500,1,'2006-1-2','0'
/*型材出库数据*/
insert into stock select '型材','槽钢','16#',4,null,null,'16#*10','吨',3000,1,'2006-1-2','0'
insert into stock select '型材','槽钢','12#',8,null,null,'12#*8','吨',3000,1,'2006-1-2','0'
drop table stock
/*要求按类别,名称,型号,单价得到库存的结余数*/
类别 名称 型号 长 宽 厚 规格 单位 单价 数量
板材 钢板 null 6 2 5 6*2*5 吨 3000 9
板材 钢板 null 4 2 5 4*2*5 吨 3000 1
板材 钢板 null 6 2 5 6*2*5 吨 3500 7
板材 钢板 null 3 2 5 3*2*5 吨 3500 1
型材 槽钢 16# 10 null null 16#*10 吨 3000 9
型材 槽钢 16# 6 null null 16#*6 吨 3000 1
型材 槽钢 12# 10 null null 12#*10 吨 3000 9
型材 槽钢 12# 2 null null 2#*10 吨 3000 1
问题点数:90、回复次数:19Top
1 楼dulei115(前途无亮)回复于 2006-10-13 10:01:52 得分 0
select type, [name], xh, c, k, h, gg, dw, dj, sum(case flags when 1 then sl else -sl end) as sl
from stock
group by type, [name], xh, c, k, h, gg, dw, djTop
2 楼dulei115(前途无亮)回复于 2006-10-13 10:03:00 得分 0
if object_id('stock') is not null drop table stock
go
create table stock
(
id int identity(1,1),
type varchar(20),--材料类别
name varchar(20),--材料名称
xh varchar(20),--材料型号
c int ,--长度
k int ,--宽度
h int ,--厚度
gg varchar(20),--材料规格
dw varchar(20),--计量单位
dj int, --材料单价
sl int, --出入库数量
rq datetime ,--日期
flags char(1) --出入库标志(1为入库,0为出库)
)
go
/*板材入库数据*/
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',3000,10,'2006-1-1','1'
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',3500,8,'2006-1-1','1'
insert into stock select '板材','钢板',null,6,2,8,'6*2*8','吨',3000,15,'2006-1-1','1'
insert into stock select '板材','冷轧板',null,10,3,12,'10*3*12','吨',4000,20,'2006-1-1','1'
/*型材入库数据*/
insert into stock select '型材','槽钢','16#',10,null,null,'16#*10','吨',3000,10,'2006-1-1','1'
insert into stock select '型材','槽钢','12#',10,null,null,'12#*10','吨',3000,10,'2006-1-1','1'
/*板材出库数据*/
insert into stock select '板材','钢板',null,2,2,5,'2*2*5','吨',3000,1,'2006-1-2','0'
insert into stock select '板材','钢板',null,3,2,5,'3*2*5','吨',3500,1,'2006-1-2','0'
/*型材出库数据*/
insert into stock select '型材','槽钢','16#',4,null,null,'16#*10','吨',3000,1,'2006-1-2','0'
insert into stock select '型材','槽钢','12#',8,null,null,'12#*8','吨',3000,1,'2006-1-2','0'
go
select type, [name], xh, c, k, h, gg, dw, dj, sum(case flags when 1 then sl else -sl end) as sl
from stock
group by type, [name], xh, c, k, h, gg, dw, dj
/*要求按类别,名称,型号,单价得到库存的结余数
type name xh c k h gg dw dj sl
板材 钢板 NULL 2 2 5 2*2*5 吨 3000 -1
板材 钢板 NULL 3 2 5 3*2*5 吨 3500 -1
板材 钢板 NULL 6 2 5 6*2*5 吨 3000 10
板材 钢板 NULL 6 2 5 6*2*5 吨 3500 8
板材 钢板 NULL 6 2 8 6*2*8 吨 3000 15
板材 冷轧板 NULL 10 3 12 10*3*12 吨 4000 20
型材 槽钢 12# 8 NULL NULL 12#*8 吨 3000 -1
型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 10
型材 槽钢 16# 4 NULL NULL 16#*10 吨 3000 -1
型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 10*/
drop table stock
Top
3 楼allright_flash()回复于 2006-10-13 10:06:11 得分 0
select type as 材料类别,name as 材料名称,xh as 材料型号,
c as 长度,k as 宽度,h as 厚度,gg as 材料规格,dw as 计量单位,dj as 材料单价,
((select sum(sl) as sum1 from stock where flags=1 group by type )-
(select sum(sl) as sum2 from stock where flags=0 group by type )) as 数量
from stock order by type
Top
4 楼xurui_hjw()回复于 2006-10-13 10:11:50 得分 0
to:dulei115()
板材 钢板 NULL 2 2 5 2*2*5 吨 3000 -1
板材 钢板 NULL 3 2 5 3*2*5 吨 3500 -1
板材 钢板 NULL 6 2 5 6*2*5 吨 3000 10
板材 钢板 NULL 6 2 5 6*2*5 吨 3500 8
板材 钢板 NULL 6 2 8 6*2*8 吨 3000 15
板材 冷轧板 NULL 10 3 12 10*3*12 吨 4000 20
型材 槽钢 12# 8 NULL NULL 12#*8 吨 3000 -1
型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 10
型材 槽钢 16# 4 NULL NULL 16#*10 吨 3000 -1
型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 10
这样的结果不对啊!!
Top
5 楼xurui_hjw()回复于 2006-10-13 10:13:13 得分 0
to:allright_flash()
服务器: 消息 512,级别 16,状态 1,行 32
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。Top
6 楼xurui_hjw()回复于 2006-10-13 10:35:18 得分 0
自己顶一下
就是计算出库存材料的结余数,比如10张钢板,规格是6*4*5,把其中一张切割下来2*4*5这么一块出库,那么库存结余就是6*4*5的钢板为9张,4*4*5的钢板为1张Top
7 楼dulei115(前途无亮)回复于 2006-10-13 10:43:35 得分 0
哦,还要计算切割的。。。Top
8 楼xurui_hjw()回复于 2006-10-13 10:45:21 得分 0
dulei115() :
是啊,是啊.要把切割的和没有切割的分开做库存结余Top
9 楼dulei115(前途无亮)回复于 2006-10-13 10:48:05 得分 0
这样好像有点难,比如10张6*4*5的钢板,两次切割都是一块2*4*5的,那返回的是
8张6*4*5 + 2张4*4*5(虽然按常理一般情况下是下面的那种情况!!!)
还是
9张6*4*5 + 1张2*4*5Top
10 楼dulei115(前途无亮)回复于 2006-10-13 10:53:25 得分 0
出库的品种如果有多种选择就更乱了,比如2*4*5的钢板也可以理解为从
insert into stock select '板材','钢板',null,6,2,8,'6*2*8','吨',3000,15,'2006-1-1','1'
上切割下来的,大小规格没超过而且单价也相同嘛。Top
11 楼xurui_hjw()回复于 2006-10-13 10:56:47 得分 0
dulei115()
你说的情况是这样:
不管切割多少块小板,总是先从一张板上切割,当一张板用完之后再切割其他板
所以,只存在9张6*4*5 + 1张2*4*5这一种情况.
Top
12 楼yjlhch(爱拼才会赢)回复于 2006-10-13 10:57:36 得分 0
路过,帮顶一下Top
13 楼xurui_hjw()回复于 2006-10-13 11:01:53 得分 0
出库的品种如果有多种选择就更乱了
--------------------------
在钢板入库的时候都是统一规格入库,在出库的时候,比如说,一个工程要用9张半钢板
那么出库时候按照入库的规格先出9张,剩下半张,从整张的切割下来出库.
至于单价:出库单价=入库单价
Top
14 楼dulei115(前途无亮)回复于 2006-10-13 11:04:14 得分 0
出库时的宽和厚肯定和入库的品种相同??只是长度可能不同??Top
15 楼xurui_hjw()回复于 2006-10-13 11:10:17 得分 0
出库时的宽和厚肯定和入库的品种相同??只是长度可能不同??
-------------------------------
是的,对于板材来说,出库的时候不管是从长的部分切割,还是从宽的部分切割,边长总是一样的.所以才能产生规格,规格=长*宽*厚
对于型材来说,只是长短问题,不存在别的Top
16 楼dulei115(前途无亮)回复于 2006-10-13 11:56:42 得分 90
结果是出来了,感觉怪怪的,肯定不通用,前提条件:出库时的宽和厚肯定和入库的品种相同,只是长度可能不同
if object_id('stock') is not null drop table stock
go
create table stock
(
id int identity(1,1),
type varchar(20),--材料类别
name varchar(20),--材料名称
xh varchar(20),--材料型号
c int ,--长度
k int ,--宽度
h int ,--厚度
gg varchar(20),--材料规格
dw varchar(20),--计量单位
dj int, --材料单价
sl int, --出入库数量
rq datetime ,--日期
flags char(1) --出入库标志(1为入库,0为出库)
)
go
/*板材入库数据*/
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',3000,10,'2006-1-1','1'
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',3500,8,'2006-1-1','1'
insert into stock select '板材','钢板',null,6,2,8,'6*2*8','吨',3000,15,'2006-1-1','1'
insert into stock select '板材','冷轧板',null,10,3,12,'10*3*12','吨',4000,20,'2006-1-1','1'
/*型材入库数据*/
insert into stock select '型材','槽钢','16#',10,null,null,'16#*10','吨',3000,10,'2006-1-1','1'
insert into stock select '型材','槽钢','12#',10,null,null,'12#*10','吨',3000,10,'2006-1-1','1'
/*板材出库数据*/
insert into stock select '板材','钢板',null,2,2,5,'2*2*5','吨',3000,1,'2006-1-2','0'
insert into stock select '板材','钢板',null,3,2,5,'3*2*5','吨',3500,1,'2006-1-2','0'
/*型材出库数据*/
insert into stock select '型材','槽钢','16#',4,null,null,'16#*10','吨',3000,1,'2006-1-2','0'
insert into stock select '型材','槽钢','12#',8,null,null,'12#*8','吨',3000,1,'2006-1-2','0'
go
----------------------------------------------------------------------------------------------
select a.type, a.[name], a.xh, case c.id when 1 then a.c when 2 then (a.sl - b.sl) % a.c end as c,
a.k, a.h, replace(ltrim(rtrim(isnull(a.xh, '') + ' '
+ isnull(cast(case c.id when 1 then a.c when 2 then (a.sl - b.sl) % a.c end as varchar), '')
+ ' ' + isnull(cast(a.k as varchar), '') + ' ' + isnull(cast(a.h as varchar), ''))), ' ', '*') as gg, --gg最好用一个函数来生成
a.dw, a.dj, case c.id when 1 then (a.sl - b.sl) / a.c when 2 then 1 end as sl
from (select type, [name], xh, c, k, h, gg, dw, dj, sum(c * sl) as sl
from stock
where flags = '1'
group by type, [name], xh, c, k, h, gg, dw, dj) a
join (select type, [name], xh, k, h, dw, dj, sum(c * sl) as sl
from stock
where flags = '0'
group by type, [name], xh, k, h, dw, dj) b
on a.type = b.type and a.[name] = b.[name] and isnull(a.xh, '') = isnull(b.xh, '') and isnull(a.k, -1) = isnull(b.k, -1)
and isnull(a.h, -1) = isnull(b.h, -1) and a.dw = b.dw and a.dj = b.dj
cross join (select 1 as id union select 2) c
where c.id <> 2 or (a.sl - b.sl) % a.c <> 0
order by a.type, a.[name], a.xh desc, a.k, a.h, a.dw, a.dj, c.id
---------------------------------------------------------------------------------------------
/*要求按类别,名称,型号,单价得到库存的结余数
type name xh c k h gg dw dj sl
---- ---- ---- --- ----- ----- ----- --- ----- --
板材 钢板 NULL 6 2 5 6*2*5 吨 3000 9
板材 钢板 NULL 4 2 5 4*2*5 吨 3000 1
板材 钢板 NULL 6 2 5 6*2*5 吨 3500 7
板材 钢板 NULL 3 2 5 3*2*5 吨 3500 1
型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 9
型材 槽钢 16# 6 NULL NULL 16#*6 吨 3000 1
型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 9
型材 槽钢 12# 2 NULL NULL 12#*2 吨 3000 1*/
------------------------------------------------------------------------------------------
drop table stock
Top
17 楼xurui_hjw()回复于 2006-10-13 12:01:55 得分 0
dulei115()
大哥多谢了
下午结帖
结果是出来了,感觉怪怪的
---------------
是啊,肯定不通用,但是没办法,业务要求就是这样.
Top
18 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-10-13 13:46:13 得分 0
select id,类别=type,名称=name,型号=xh,长=c,宽=k,厚=h,规格=gg,单位=dw,单价=dj,sl,
结余数量=(select sum(case flags when 1 then sl else -sl end) from stock
where id!>a.id and type=a.type and gg=a.gg)
from stock a
group by type,name,xh,c,k,h,gg,dw,dj,sl,id
order by 规格 asc,id asc
id 类别 名称 型号 长 宽 厚 规格 单位 单价 sl 结余数量
----------- -------------------- -------------------- -------------------- ----------- ----------- ----------- -------------------- -------------------- ----------- ----------- -----------
4 板材 冷轧板 NULL 10 3 12 10*3*12 吨 4000 20 20
6 型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 10 10
10 型材 槽钢 12# 8 NULL NULL 12#*8 吨 3000 1 -1
5 型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 10 10
9 型材 槽钢 16# 4 NULL NULL 16#*10 吨 3000 1 9
7 板材 钢板 NULL 2 2 5 2*2*5 吨 3000 1 -1
8 板材 钢板 NULL 3 2 5 3*2*5 吨 3500 1 -1
1 板材 钢板 NULL 6 2 5 6*2*5 吨 3000 10 10
2 板材 钢板 NULL 6 2 5 6*2*5 吨 3500 8 18
3 板材 钢板 NULL 6 2 8 6*2*8 吨 3000 15 15
(所影响的行数为 10 行)
Top
19 楼roy_88(中国风_燃烧你的激情!!!)回复于 2006-10-13 13:51:29 得分 0
select type,name,xh,c,k,h,gg,dw,dj,
数量=sum(case flags when 1 then sl else -sl end)
from stock
group by type,name,xh,c,k,h,gg,dw,dj
type name xh c k h gg dw dj 数量
-------------------- -------------------- -------------------- ----------- ----------- ----------- -------------------- -------------------- ----------- -----------
板材 钢板 NULL 2 2 5 2*2*5 吨 3000 -1
板材 钢板 NULL 3 2 5 3*2*5 吨 3500 -1
板材 钢板 NULL 6 2 5 6*2*5 吨 3000 10
板材 钢板 NULL 6 2 5 6*2*5 吨 3500 8
板材 钢板 NULL 6 2 8 6*2*8 吨 3000 15
板材 冷轧板 NULL 10 3 12 10*3*12 吨 4000 20
型材 槽钢 12# 8 NULL NULL 12#*8 吨 3000 -1
型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 10
型材 槽钢 16# 4 NULL NULL 16#*10 吨 3000 -1
型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 10
(所影响的行数为 10 行)
Top




