首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求物流仓库管理的SQL语句?多谢大家

2012-01-10 
求物流仓库管理的SQL语句?谢谢大家./*如何生成库存明细帐和库存盘点表*/--表结构createtabletest--出入库

求物流仓库管理的SQL语句?谢谢大家.


/*如何生成库存明细帐和库存盘点表*/

--表结构

create   table   test   --出入库表
(
id   int   identity(1,1),   --主键
货物类别     varchar(20),
货物名称     varchar(20),
货物规格     varchar(20),
货物价格     money,
出入库日期   datetime,
数量     int,
单据编号   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 ', '1 ',null,null
insert   into   test   select   'a类 ', 'a1 ', '1*2 ',1500, '2007-1-1 ',15, 'rk-2 ', '1 ',null,null
insert   into   test   select   'a类 ', 'a2 ', '1*3 ',2000, '2007-1-1 ',20, 'rk-3 ', '1 ',null,null

--以下是出库数据

insert   into   test   select   'a类 ', 'a1 ', '1*2 ',1000, '2007-1-1 ',5, 'ck-1 ', '0 ', '部门1 ', '张三 '
insert   into   test   select   'a类 ', 'a1 ', '1*2 ',1500, '2007-1-1 ',10, 'ck-2 ', '0 ', '部门1 ', '张三 '
insert   into   test   select   'a类 ', 'a2 ', '1*3 ',2000, '2007-1-1 ',10, 'ck-3 ', '0 ', '部门1 ', '张三 '

--以下是出库退货数据


insert   into   test   select   'a类 ', 'a1 ', '1*2 ',1000, '2007-1-1 ',1, 'tk-1 ', '2 ', '部门1 ', '张三 '
insert   into   test   select   'a类 ', 'a1 ', '1*2 ',1500, '2007-1-1 ',2, 'tk-2 ', '2 ', '部门1 ', '张三 '
insert   into   test   select   'a类 ', 'a2 ', '1*3 ',2000, '2007-1-1 ',3, '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               40000

a类               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               20000

a类               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-1

a类                   a1                   1*2                 1500                 7                           10500                   2007-1-1

a类                   a2                   1*3                 2000                 13                         26000                   2007-1-1      
*/

/*

说明:  

货物出入库明细帐能够按照日期段进行查询
货物库存盘点在任何一天都能得到库存的准确数字.比如,2007-1-2这一天没有出入库记录,那么在2007-1-2进行
查询的时候,也能够得出以上报表数据

*/

[解决办法]
--1
select 货物类别, 货物名称, 货物规格, 货物价格,


入库单据号=case when 出入库状态=1 then 单据编号 end, 入库数量=case when 出入库状态=1 then 数量 end, 入库金额=case when 出入库状态=1 then 货物价格*数量 end,
出库单据号=case when 出入库状态=0 then 单据编号 end, 出库数量=case when 出入库状态=0 then 数量 end, 出库金额=case when 出入库状态=0 then 货物价格*数量 end,
退库单据号=case when 出入库状态=2 then 单据编号 end, 退库数量=case when 出入库状态=2 then 数量 end, 退库金额=case when 出入库状态=2 then 货物价格*数量 end,
领用部门, 领用人, 日期=出入库日期, 结余数量=数量, 结余金额=货物价格*数量
from test as A
[解决办法]
select 货物类别, 货物名称, 货物规格 , 货物价格 ,
入库单据号=max(case 出入库状态 when 1 then 单据编号 end), 入库数量=sum(case 出入库状态 when 1 then 数量 else 0 end), 入库金额=sum(case 出入库状态 when 1 then 货物价格*数量 else 0 end),
出库单据号=max(case 出入库状态 when 0 then 单据编号 end), 出库数量=sum(case 出入库状态 when 0 then 数量 else 0 end), 出库金额=sum(case 出入库状态 when 0 then 货物价格*数量 else 0 end),
退库单据号=max(case 出入库状态 when 2 then 单据编号 end), 退库数量=sum(case 出入库状态 when 2 then 数量 else 0 end), 退库金额=sum(case 出入库状态 when 2 then 货物价格*数量 else 0 end),
领用部门, 领用人, 日期=出入库日期,
结余数量=(select sum(case when 出入库状态 in(1,2) then 数量 else -数量 end)from test_t where id!> ta.id and 货物名称=ta.货物名称 and 货物规格=ta.货物规格 and 货物价格=ta.货物价格),
结余金额=(select sum(case when 出入库状态 in(1,2) then 数量*货物价格 else -数量*货物价格 end)from test_t where id!> ta.id and 货物名称=ta.货物名称 and 货物规格=ta.货物规格 and 货物价格=ta.货物价格)
from test_t ta
group by ta.id,货物类别, 货物名称, 货物规格 , 货物价格 , 领用部门, 领用人, 出入库日期
/*
a类a11*21000.0000rk-11010000.0000NULL0.0000NULL0.0000NULLNULL2007-01-01 00:00:00.0001010000.0000
a类a11*21500.0000rk-21522500.0000NULL0.0000NULL0.0000NULLNULL2007-01-01 00:00:00.0001522500.0000
a类a21*32000.0000rk-32040000.0000NULL0.0000NULL0.0000NULLNULL2007-01-01 00:00:00.0002040000.0000
a类a11*21000.0000NULL0.0000ck-155000.0000NULL0.0000部门1张三2007-01-01 00:00:00.00055000.0000
a类a11*21500.0000NULL0.0000ck-21015000.0000NULL0.0000部门1张三2007-01-01 00:00:00.00057500.0000
a类a21*32000.0000NULL0.0000ck-31020000.0000NULL0.0000部门1张三2007-01-01 00:00:00.0001020000.0000
a类a11*21000.0000NULL0.0000NULL0.0000tk-111000.0000部门1张三2007-01-01 00:00:00.00066000.0000
a类a11*21500.0000NULL0.0000NULL0.0000tk-223000.0000部门1张三2007-01-01 00:00:00.000710500.0000
a类a21*32000.0000NULL0.0000NULL0.0000tk-336000.0000部门1张三2007-01-01 00:00:00.0001326000.0000
*/

热点排行