VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: 牛牛很乖

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

[复制链接]

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-28 22:54:01 | 显示全部楼层
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类        a1        1*2        1000.0000        rk-1        10        10000.0000        NULL        0        .0000        NULL        0        .0000        NULL        NULL        2007-01-01 00:00:00.000        10        10000.0000
a类        a1        1*2        1500.0000        rk-2        15        22500.0000        NULL        0        .0000        NULL        0        .0000        NULL        NULL        2007-01-01 00:00:00.000        15        22500.0000
a类        a2        1*3        2000.0000        rk-3        20        40000.0000        NULL        0        .0000        NULL        0        .0000        NULL        NULL        2007-01-01 00:00:00.000        20        40000.0000
a类        a1        1*2        1000.0000        NULL        0        .0000        ck-1        5        5000.0000        NULL        0        .0000        部门1        张三        2007-01-01 00:00:00.000        5        5000.0000
a类        a1        1*2        1500.0000        NULL        0        .0000        ck-2        10        15000.0000        NULL        0        .0000        部门1        张三        2007-01-01 00:00:00.000        5        7500.0000
a类        a2        1*3        2000.0000        NULL        0        .0000        ck-3        10        20000.0000        NULL        0        .0000        部门1        张三        2007-01-01 00:00:00.000        10        20000.0000
a类        a1        1*2        1000.0000        NULL        0        .0000        NULL        0        .0000        tk-1        1        1000.0000        部门1        张三        2007-01-01 00:00:00.000        6        6000.0000
a类        a1        1*2        1500.0000        NULL        0        .0000        NULL        0        .0000        tk-2        2        3000.0000        部门1        张三        2007-01-01 00:00:00.000        7        10500.0000
a类        a2        1*3        2000.0000        NULL        0        .0000        NULL        0        .0000        tk-3        3        6000.0000        部门1        张三        2007-01-01 00:00:00.000        13        26000.0000
*/
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-1-29 07:00:01 | 显示全部楼层
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,
领用部门,  领用人,  日期=出入库日期,
结余数量=(select sum(case when 出入库状态=0 then -数量  else 数量 end) from test where id<=A.id and
货物类别=A.货物类别 and 货物名称=A.货物名称 and 货物规格=A.货物规格  and 货物价格=A.货物价格),
结余金额=货物价格*(select sum(case when 出入库状态=0 then -数量  else 数量 end) from test where id<=A.id and
货物类别=A.货物类别 and 货物名称=A.货物名称 and 货物规格=A.货物规格  and 货物价格=A.货物价格)
from test as A

--result
货物类别                 货物名称                 货物规格                 货物价格                  入库单据号                入库数量        入库金额                  出库单据号                出库数量        出库金额                  退库单据号                退库数量        退库金额                  领用部门                 领用人                  日期                                                     结余数量        结余金额                  
-------------------- -------------------- -------------------- --------------------- -------------------- ----------- --------------------- -------------------- ----------- --------------------- -------------------- ----------- --------------------- -------------------- -------------------- ------------------------------------------------------ ----------- ---------------------
a类                   a1                   1*2                  1000.0000             rk-1                 10          10000.0000            NULL                 NULL        NULL                  NULL                 NULL        NULL                  NULL                 NULL                 2007-01-01 00:00:00.000                                10          10000.0000
a类                   a1                   1*2                  1500.0000             rk-2                 15          22500.0000            NULL                 NULL        NULL                  NULL                 NULL        NULL                  NULL                 NULL                 2007-01-01 00:00:00.000                                15          22500.0000
a类                   a2                   1*3                  2000.0000             rk-3                 20          40000.0000            NULL                 NULL        NULL                  NULL                 NULL        NULL                  NULL                 NULL                 2007-01-01 00:00:00.000                                20          40000.0000
a类                   a1                   1*2                  1000.0000             NULL                 NULL        NULL                  ck-1                 5           5000.0000             NULL                 NULL        NULL                  部门1                  张三                   2007-01-01 00:00:00.000                                5           5000.0000
a类                   a1                   1*2                  1500.0000             NULL                 NULL        NULL                  ck-2                 10          15000.0000            NULL                 NULL        NULL                  部门1                  张三                   2007-01-01 00:00:00.000                                5           7500.0000
a类                   a2                   1*3                  2000.0000             NULL                 NULL        NULL                  ck-3                 10          20000.0000            NULL                 NULL        NULL                  部门1                  张三                   2007-01-01 00:00:00.000                                10          20000.0000
a类                   a1                   1*2                  1000.0000             NULL                 NULL        NULL                  NULL                 NULL        NULL                  tk-1                 1           1000.0000             部门1                  张三                   2007-01-01 00:00:00.000                                6           6000.0000
a类                   a1                   1*2                  1500.0000             NULL                 NULL        NULL                  NULL                 NULL        NULL                  tk-2                 2           3000.0000             部门1                  张三                   2007-01-01 00:00:00.000                                7           10500.0000
a类                   a2                   1*3                  2000.0000             NULL                 NULL        NULL                  NULL                 NULL        NULL                  tk-3                 3           6000.0000             部门1                  张三                   2007-01-01 00:00:00.000                                13          26000.0000

(9 row(s) affected)
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-29 09:27:02 | 显示全部楼层
以上语句改一下楼主的表名,把test_t 改为test就行了。
create table test_t --出入库表
(
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_t select 'a类','a1','1*2',1000,'2007-1-1',10,'rk-1','1',null,null
insert into test_t select 'a类','a1','1*2',1500,'2007-1-1',15,'rk-2','1',null,null
insert into test_t select 'a类','a2','1*3',2000,'2007-1-1',20,'rk-3','1',null,null

--以下是出库数据

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

--以下是出库退货数据


insert into test_t select 'a类','a1','1*2',1000,'2007-1-1',1,'tk-1','2','部门1','张三'
insert into test_t select 'a类','a1','1*2',1500,'2007-1-1',2,'tk-2','2','部门1','张三'
insert into test_t select 'a类','a2','1*3',2000,'2007-1-1',3,'tk-3','2','部门1','张三'select 货物类别,  货物名称,  货物规格 ,  货物价格 ,
库存结余数量=(select sum(case when 出入库状态 in(1,2) then 数量 else -数量 end)from test_t where  货物名称=ta.货物名称 and 货物规格=ta.货物规格 and 货物价格=ta.货物价格),
库存结余金额=(select sum(case when 出入库状态 in(1,2) then 数量*货物价格 else -数量*货物价格 end)from test_t where 货物名称=ta.货物名称 and 货物规格=ta.货物规格 and 货物价格=ta.货物价格),
出入库日期
from test_t ta
group by 货物类别,  货物名称,  货物规格 ,  货物价格 ,出入库日期
货物类别                 货物名称                 货物规格                 货物价格                  库存结余数量      库存结余金额                出入库日期                                                  
-------------------- -------------------- -------------------- --------------------- ----------- --------------------- ------------------------------------------------------
a类                   a1                   1*2                  1000.0000             6           6000.0000             2007-01-01 00:00:00.000
a类                   a1                   1*2                  1500.0000             7           10500.0000            2007-01-01 00:00:00.000
a类                   a2                   1*3                  2000.0000             13          26000.0000            2007-01-01 00:00:00.000

(所影响的行数为 3 行)


回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-29 10:45:02 | 显示全部楼层
已测试过答案,楼主可以结贴了
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 where id!>ta.id and 货物名称=ta.货物名称 and 货物规格=ta.货物规格 and 货物价格=ta.货物价格),
结余金额=(select sum(case when 出入库状态 in(1,2) then 数量*货物价格 else -数量*货物价格 end)from test where id!>ta.id and 货物名称=ta.货物名称 and 货物规格=ta.货物规格 and 货物价格=ta.货物价格)
from test  ta
group by ta.id,货物类别,  货物名称,  货物规格 ,  货物价格 , 领用部门,  领用人,   出入库日期

select 货物类别,  货物名称,  货物规格 ,  货物价格 ,
库存结余数量=(select sum(case when 出入库状态 in(1,2) then 数量 else -数量 end)from test where  货物名称=ta.货物名称 and 货物规格=ta.货物规格 and 货物价格=ta.货物价格),
库存结余金额=(select sum(case when 出入库状态 in(1,2) then 数量*货物价格 else -数量*货物价格 end)from test where 货物名称=ta.货物名称 and 货物规格=ta.货物规格 and 货物价格=ta.货物价格),
出入库日期
from test ta
group by 货物类别,  货物名称,  货物规格 ,  货物价格 ,出入库日期
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-29 21:27:02 | 显示全部楼层
哇,太长了~~
每位都是高手啊~~
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-30 11:54:01 | 显示全部楼层
列名多,要加一下判断是比较多点,哈哈
楼主可以生成视图,以后查询时就方便多了
在语句前加
create view 视图A
as

以后查询时
select * from 视图A
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表