CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

求SQL语句的写法,学习.....

楼主xurui_hjw()2006-10-13 09:53:07 在 MS-SQL Server / 基础类 提问

 
  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

相关问题

关键词

得分解答快速导航

  • 帖主:xurui_hjw
  • dulei115

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo