/*如何生成库存明细帐和库存盘点表*/--更改表结构create table test --出入库表
(
id int identity(1,1), --主键
货物类别  varchar(20),
货物名称  varchar(20),
货物规格  varchar(20),
货物价格  money,
出入库日期 datetime,
数量  int,
入库单编号 varchar(20),
出库单编号 varchar(20),
退库单编号 varchar(20),
出入库状态 char(1),--1代表货物入库,0代表货物出库,2代表出库退货
领用部门 varchar(20),
领用人 varchar(20)
)
--以下是入库数据
insert into test select 'a类','a1','1*2',1000,'2007-1-1',10,'rk-1',null,null,'1',null,null
insert into test select 'a类','a1','1*2',1500,'2007-1-1',15,'rk-2',null,null,'1',null,null
insert into test select 'a类','a2','1*3',2000,'2007-1-1',20,'rk-3',null,null,'1',null,null--以下是出库数据insert into test select 'a类','a1','1*2',1000,'2007-1-1',5,null,'ck-1',null,'0','部门1','张三'
insert into test select 'a类','a1','1*2',1500,'2007-1-1',10,null,'ck-2',null,'0','部门1','张三'
insert into test select 'a类','a2','1*3',2000,'2007-1-1',10,null,'ck-3',null,'0','部门1','张三'--以下是出库退货数据
insert into test select 'a类','a1','1*2',1000,'2007-1-1',1,null,null,'tk-1','2','部门1','张三'
insert into test select 'a类','a1','1*2',1500,'2007-1-1',2,null,null,'tk-2','2','部门1','张三'
insert into test select 'a类','a2','1*3',2000,'2007-1-1',3,null,null,'tk-3','2','部门1','张三'
select * from test
drop table test
/*
要求得到以下两种格式的库存帐
1.货物出入库明细货物类别  货物名称  货物规格   货物价格   入库单据号  入库数量  入库金额   出库单据号  出库数量  出库金额  退库单据号  退库数量  退库金额  领用部门  领用人   日期     结余数量  结余金额   
a类   a1       1*2       1000       rk-1       10        10000      null       0         0        null        0          0     null     null    2007-1-1  10       10000
a类       a1       1*2       1500       rk-2       15        22500      null       0         0        null        0          0     null     null    2007-1-1  15       22500
a类       a2       1*3       2000       rk-3       20        40000      null       0         0        null        0          0     null     null    2007-1-1  20       40000a类       a1       1*2       1000       null       0         0          ck-1       5         5000     null        0          0     部门1    张三    2007-1-1   5        5000
a类       a1       1*2       1500       null       0         0          ck-2       10       15000     null        0          0     部门1    张三    2007-1-1   5        7500
a类       a2       1*3       2000       null       0         0          ck-3       10       20000     null        0          0     部门1    张三    2007-1-1   10       20000a类       a1       1*2       1000       null       0         0          null       0         0        tk-1        1        1000    部门1    张三    2007-1-1   6        6000
a类       a1       1*2       1500       null       0         0          null       0         0        tk-2        2        3000    部门1    张三    2007-1-1   7        10500
a类       a2       1*3       2000       null       0         0          null       0         0        tk-3        3        6000    部门1    张三    2007-1-1   13       26000     
2.货物库存盘点货物类别    货物名称   货物规格    货物价格    库存结余数量   库存结余金额   日期a类         a1         1*2        1000        6             6000          2007-1-1a类         a1         1*2        1500        7             10500         2007-1-1a类         a2         1*3        2000        13            26000         2007-1-1   
*//*说明: 货物出入库明细帐能够按照日期段进行查询
货物库存盘点在任何一天都能得到库存的准确数字.比如,2007-1-2这一天没有出入库记录,那么在2007-1-2进行
查询的时候,也能够得出以上报表数据*/

解决方案 »

  1.   

    楼主这个类似行列转换,我这里网吧没装SQL,给个例子你参考一下
    create table test (姓名 char(10),课程 char(10),成绩 int)
    go
    insert test values('张三','语文',80)
    insert test values('张三','数学',86)
    insert test values('张三','英语',75)
    insert test values('李四','语文',78)
    insert test values('李四','数学',85)
    insert test values('李四','英语',78)
    select * from test
    declare @sql varchar(8000)
    set @sql = 'select 姓名'
    select @sql = @sql + ',sum(case 课程 when '''+课程+''' then 成绩 end) ['+课程+']'
    from (select distinct 课程 from test) as a
    select @sql = @sql+' from test group by 姓名'
    exec(@sql)drop table test--结果
    /* 
    姓名  课程  成绩
    张三  语文  80
    张三  数学  86
    张三  英语  75
    李四  语文  78
    李四  数学  85
    李四  英语  78姓名  数学  英语  语文
    李四  85    78    78
    张三  86    75    80
    */  
      

  2.   

    首先我建议你将你的关系规范化,即达到第三范式(一般都要求达到第三范式)。在你用‘insert into test select’进行查询的时候,你的确定你已经建立的表和你要插入的数据的字段类型相同且顺序是一样的,然后在用Select语句进行多表查询,即可以得到相应的查询表!