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),--计量单位
dwzl int, --单位重量(针对于型材而言)
dj   int, --材料单价
sl   int, --出入库数量
rq   datetime ,--日期
flags char(1),--出入库标志(1为入库,0为出库)
bh varchar(20),--票据编号
yt varchar(20),--材料用途
dept_name  varchar(20)--领料部门
)
/*板材入库数据*/
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',0,3000,10,'2006-1-1','1','1-1',null,null
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',0,3500,8,'2006-1-1','1','1-2',null,null
insert into stock select '板材','钢板',null,6,2,8,'6*2*8','吨',0,3000,15,'2006-1-1','1','1-3',null,null
insert into stock select '板材','冷轧板',null,10,3,12,'10*3*12','吨',0,4000,20,'2006-1-1','1','1-4',null,null
/*型材入库数据*/
insert into stock select '型材','槽钢','16#',10,null,null,'16#*10','吨',0.03,3000,10,'2006-1-1','1','1-5',null,null
insert into stock select '型材','槽钢','12#',10,null,null,'12#*10','吨',0.02,3000,10,'2006-1-1','1','1-6',null,null
/*标准件入库数据*/
insert into stock select '标准件','aaa',null,null,null,null,'a1','片',0,100,10,'2006-1-1','1','1-7',null,null
insert into stock select '标准件','bbb',null,null,null,null,'b1','片',0,200,20,'2006-1-1','1','1-8',null,null
/*板材出库数据*/
insert into stock select '板材','钢板',null,2,2,5,'2*2*5','吨',0,3000,1,'2006-1-2','0','0-1','大梁横板','生产车间'
insert into stock select '板材','钢板',null,3,2,5,'3*2*5','吨',0,3500,1,'2006-1-2','0','0-2','大梁横板','生产车间'
/*型材出库数据*/
insert into stock select '型材','槽钢','16#',4,null,null,'16#*4','吨',0.03,3000,1,'2006-1-2','0','0-3','左箱板','生产车间'
insert into stock select '型材','槽钢','12#',8,null,null,'12#*8','吨',0.03,3000,1,'2006-1-2','0','0-4','右箱板','生产车间'
/*标准件出库数据*/
insert into stock select '标准件','aaa',null,null,null,null,'a1','片',0,100,4,'2006-1-2','0','0-5','前轮','生产车间'
insert into stock select '标准件','bbb',null,null,null,null,'b1','片',0,200,3,'2006-1-2','0','0-6','后轮','生产车间'drop table stock/*
要求按类别,名称,型号,规格,单价,日期得到库存材料的出入库明细帐
明细账说明:对于板材而言
规格=c * k * h
1.入库总重量=(板材入库时的长度 * 宽度 * 厚度/1000) * 7.85 * 入库数量
2.入库金额=dj * 入库总重量
3.出库总重量=(板材出库时的长度 * 宽度 * 厚度/1000) * 7.85 * 出库数量
4.出库金额=dj * 出库总重量
5.板材的结余数量=同类别,同名称,同价格的板材的入库数量-出库数量
6.结余板材的长度等于同类别,同名称,同价格的板材的入库长度-出库长度
           宽度等于同类别,同名称,同价格的板材的入库宽度-出库宽度
           厚度等于同类别,同名称,同价格的板材的入库厚度-出库厚度
  结余重量=(结余长度 * 结余宽度 * 结余厚度/1000) * 7.85 * 结余数量
  结余金额=dj * 结余重量对于型材而言
规格=xh * c
入库总重量=dwzl * 入库长度 * 入库数量
入库金额=dj * 入库总重量
出库总重量=dwzl * 出库长度 * 出库数量
出库金额=出库总重量 * 出库数量
结余长度=入库长度  - 出库长度
结余总重量=结余长度 * 结余数量
结余金额=dj * 结余总重量对于标准件而言
结余数量=入库数量-出库数量
结余金额=dj * 结余数量
*/
/*
类别   名称   型号   入库规格  单位   单价   入库数量    入库总重量   入库金额  出库规格 出库数量  出库总重量    出库金额   结余规格    结余数量   结余重量  结余金额   日期    票据编号   材料用途  领料部门
板材   钢板   null    6*2*5    吨    3000     10         4.71        14130     null      0         0           0        null        null       4.71   14130   2006-1-1   1-1        null     null
板材   钢板   null    6*2*5    吨    3500     8          3.768       13188     null      0         0           0        null        null       3.768  13188   2006-1-1   1-2        null     null 
板材   钢板   null    6*2*8    吨    3000     15         11.304      33912     null      0         0           0        null        null       11.304 33912   2006-1-1   1-3        null     null
板材   冷轧板 null    10*3*12  吨    4000     20         56.52       226080    null      0         0           0        null        null       56.52  226080  2006-1-1   1-4        null     null
型材   槽钢   16#     16#*10   吨    3000     10         3           9000      null      0         0           0        null        null       3      9000    2006-1-1   1-5        null     null
型材   槽钢   12#     12#*10   吨    3000     10         2           6000      null      0         0           0        null        null       2      6000    2006-1-1   1-6        null     null
标准件 aaa    a1       a1      片    100      10         0           1000      null      0         0           0        a1          10         0      1000    2006-1-1   1-7        null     null
标准件 bbb    b1       b1      片    200      20         0           4000      null      0         0           0        b1          20         0      4000    2006-1-1   1-8        null     null板材   钢板   null    null     吨    3000      0         0             0       2*2*5     1       0.157        471       null         0        4.533    13599  2006-1-2   0-1       大梁横板  生产车间
板材   钢板   null    null     吨    3500      0         0             0       3*2*5     1       0.2355       824.25    null         0        3.5325   12363.75 2006-1-2 0-2       大梁横板  生产车间
型材   槽钢   16#     null     吨    3000      0         0             0       16#*4     1       0.12         360       null         0        2.88     8640   2006-1-2   0-3       左箱板    生产车间
型材   槽钢   12#     null     吨    3000      0         0             0       12#*8     1       0.16         480       null         0        1.84     5520   2006-1-2   0-4       右箱板    生产车间 
标准件 aaa    null    null     片    100       0         0             0       a1        4         0          400       a1           6        0        600    2006-1-2   0-5       前轮      生产车间
标准件 bbb    null    null     片    200       0         0             0       b1        3         0          600       b1           17       0        3400   2006-1-2   0-6       后轮      生产车间
*/--需要注意的是:以上数据只是单纯的一笔出入库数据,在以后多笔出入库发生以后,再统计报表的时候,结余规格,结余数量和结余重量,要把前一次的出入库数据考虑进去。
--能够按照类别,名称和时间段进行查询

解决方案 »

  1.   

    rockyljt(江濤) 1.物料基本资料表已经有了,入库数据的类别,规格,单位等等就是从基本资料表里取的
    2. 库存表没有分开,出入库数据使用标志位(1,0)进行区分
    3. 是啊,就是使用存储过程实现多谢了!
      

  2.   

    问题看得很头大.1. 出/入/结余的规格还会不同? 不同的时候是怎么计算的? 按各自的规格统计?
    2. 这个是明细表出来的规则是怎么样的? 每条 stock 的记录在明细表中都对应有一条记录?最后, 建议楼主把与产生统计结果没有什么关系的列去掉, 然后根据精简后的表列一个数据做统计说明.
    这样大家更容易看懂你的需求(毕竟没有太多人会愿意去花费很多时间详细理解你的业务需求)
      

  3.   

    f 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
    ---------------------------------------------------------------------------------------------
    /*要求按类别,名称,型号,单价,日期得到库存的结余数
    --如果是2006-1-1这一天
    type name xh   c   k     h     gg    dw  dj    sl    rq      
    ---- ---- ---- --- ----- ----- ----- --- ----- ---------
    板材 钢板  NULL 6   2     5    6*2*5  吨  3000  10   2006-1-1
    板材 钢板  NULL 6   2     5    6*2*5  吨  3500  8    2006-1-1
    板材 钢板  NULL 6   2     8    6*2*8  吨  3000  15   2006-1-1
    板材冷轧板 null 10  3     12   10*3*12 吨 4000  20   2006-1-1型材 槽钢  16#  10  NULL  NULL 16#*10 吨  3000  10   2006-1-1
    型材 槽钢  12#  10  NULL  NULL 12#*10 吨  3000  10   2006-1-1
    */
    /*
    --如果是2006-1-2这一天
    type name xh   c   k     h     gg    dw  dj    sl    rq        
    ---- ---- ---- --- ----- ----- ----- --- ----- -----------
    板材 钢板  NULL 6   2     5    6*2*5  吨  3000  9   2006-1-2
    板材 钢板  NULL 4   2     5    4*2*5  吨  3000  1   2006-1-2
    板材 钢板  NULL 6   2     5    6*2*5  吨  3500  7   2006-1-2
    板材 钢板  NULL 3   2     5    3*2*5  吨  3500  1   2006-1-2
    板材冷轧板 null 10  3     12   10*3*12 吨 4000  20   2006-1-2型材 槽钢  16#  10  NULL  NULL 16#*10 吨  3000  9   2006-1-2
    型材 槽钢  16#  6   NULL  NULL 16#*6  吨  3000  1   2006-1-2
    型材 槽钢  12#  10  NULL  NULL 12#*10 吨  3000  9   2006-1-2
    型材 槽钢  12#  2   NULL  NULL 12#*2  吨  3000  1   2006-1-2
    */
    ------------------------------------------------------------------------------------------
    drop table stock
    /**********************************************************************/
    以下是 dulei115()网友提供的解决方案,我想改动一下,但是总出错.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
      

  4.   

    wangtiecheng(不知不为过,不学就是错!) 
    要按照日期查询得出库存结余数*要求按类别,名称,型号,单价,日期得到库存的结余数
    --如果是2006-1-1这一天
    type name xh   c   k     h     gg    dw  dj    sl    rq      
    ---- ---- ---- --- ----- ----- ----- --- ----- ---------
    板材 钢板  NULL 6   2     5    6*2*5  吨  3000  10   2006-1-1
    板材 钢板  NULL 6   2     5    6*2*5  吨  3500  8    2006-1-1
    板材 钢板  NULL 6   2     8    6*2*8  吨  3000  15   2006-1-1
    板材冷轧板 null 10  3     12   10*3*12 吨 4000  20   2006-1-1型材 槽钢  16#  10  NULL  NULL 16#*10 吨  3000  10   2006-1-1
    型材 槽钢  12#  10  NULL  NULL 12#*10 吨  3000  10   2006-1-1
    */
    /*
    --如果是2006-1-2这一天
    type name xh   c   k     h     gg    dw  dj    sl    rq        
    ---- ---- ---- --- ----- ----- ----- --- ----- -----------
    板材 钢板  NULL 6   2     5    6*2*5  吨  3000  9   2006-1-2
    板材 钢板  NULL 4   2     5    4*2*5  吨  3000  1   2006-1-2
    板材 钢板  NULL 6   2     5    6*2*5  吨  3500  7   2006-1-2
    板材 钢板  NULL 3   2     5    3*2*5  吨  3500  1   2006-1-2
    板材冷轧板 null 10  3     12   10*3*12 吨 4000  20   2006-1-2型材 槽钢  16#  10  NULL  NULL 16#*10 吨  3000  9   2006-1-2
    型材 槽钢  16#  6   NULL  NULL 16#*6  吨  3000  1   2006-1-2
    型材 槽钢  12#  10  NULL  NULL 12#*10 吨  3000  9   2006-1-2
    型材 槽钢  12#  2   NULL  NULL 12#*2  吨  3000  1   20