帮写一个简单的SQL

xuw 2010-05-25 11:57:56
表结构如下:
入出库 (值为:入库,出库)
客户名称
产品品名
交货数量
登记日期

要检索出: 客户名称,产品品名,前日结存数量(登记日期前一天以前的入库的交货数量合计-出库的交货数量合计),本日入库数量(登记日期那天的入库数量合计),本日出库数量(登记日期那天的出库数量合计),本日结存数量(前日结存数量+本日入库数量-本日出库数量)

检索条件:客户名称,产品品名,登记日期
...全文
162 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuw 2010-05-26
  • 打赏
  • 举报
回复
xys_777:
谢了。
xuw 2010-05-25
  • 打赏
  • 举报
回复
xys_777:
你好。
如果条件只有:登记日期
要求:检索结果的每一条的:客户名称,产品品名不能重怎么改呀?
永生天地 2010-05-25
  • 打赏
  • 举报
回复

select 客户名称,产品品名,
前日结存数量 =(select sum(case when 入出库='入库' then 交货数量 else 0 end), -sum(case when 入出库='出库' then 交货数量 else 0 end) from tb where 客户名称 = 'A' and 产品品名 = 'A01' and 登记日期<'2010-05-20'),--(登记日期前一天以前的入库的交货数量合计-出库的交货数量合计),
本日入库数量 = sum(case when 入出库='入库' then 交货数量 else 0 end),--(登记日期那天的入库数量合计),
本日出库数量 = sum(case when 入出库='出库' then 交货数量 else 0 end),--(登记日期那天的出库数量合计),
本日结存数量 = sum(case when 入出库='入库' then 交货数量 else 0 end) - sum(case when 入出库='出库' then 交货数量 else 0 end) --(前日结存数量+本日入库数量-本日出库数量)
from tb
where 客户名称 = 'A' and 产品品名 = 'A01' and 登记日期='2010-05-20'
group by 客户名称,产品品名,登记日期
lygy0839 2010-05-25
  • 打赏
  • 举报
回复
呵呵,确实比较经典
htl258_Tony 2010-05-25
  • 打赏
  • 举报
回复
永生天地 2010-05-25
  • 打赏
  • 举报
回复
这样该可以了


select a.客户名称,a.产品品名,
前日结存数量 =(select sum(case when 入出库='入库' then 交货数量 else 0 end) -
sum(case when 入出库='出库' then 交货数量 else 0 end)
from tb where 客户名称 = a.客户名称 and 产品品名 = a.产品品名 and 登记日期<'2010-05-20'),--(登记日期前一天以前的入库的交货数量合计-出库的交货数量合计),
本日入库数量 = sum(case when 入出库='入库' then 交货数量 else 0 end),--(登记日期那天的入库数量合计),
本日出库数量 = sum(case when 入出库='出库' then 交货数量 else 0 end),--(登记日期那天的出库数量合计),
本日结存数量 = (select sum(case when 入出库='入库' then 交货数量 else 0 end) -
sum(case when 入出库='出库' then 交货数量 else 0 end)
from tb where 客户名称 = a.客户名称 and 产品品名 = a.产品品名 and 登记日期<='2010-05-20') --(前日结存数量+本日入库数量-本日出库数量)
from (select distinct 客户名称,产品品名 from tb) a left join tb t on a.客户名称=t.客户名称 and t.登记日期='2010-05-20'
group by a.客户名称,a.产品品名,t.登记日期

/*
客户名称 产品品名 前日结存数量 本日入库数量 本日出库数量 本日结存数量
---- ---- ----------- ----------- ----------- -----------
A A1 30 10 5 35
B B1 30 10 5 35
C C1 30 0 0 30
D D1 30 0 0 30

(所影响的行数为 4 行)

*/
xuw 2010-05-25
  • 打赏
  • 举报
回复
xys_777:
再帮帮我,我把贴子加到100分了。
xuw 2010-05-25
  • 打赏
  • 举报
回复
create table tb(
入出库 varchar(4), 客户名称 varchar(4),产品品名 varchar(4), 交货数量 int, 登记日期 datetime)
insert into tb
select '入库',' A',' A1', 30 ,'2010-05-19' union all
select '入库',' A',' A1', 10 ,'2010-05-20' union all
select '出库',' A',' A1', 5 ,'2010-05-20' union all
select '入库',' B',' B1', 30 ,'2010-05-19' union all
select '入库',' B',' B1', 10 ,'2010-05-20' union all
select '出库',' B',' B1', 5 ,'2010-05-20' union all
select '入库',' C',' C1', 30 ,'2010-05-19' union all
select '入库',' D',' D1', 30 ,'2010-05-19'

select 客户名称,产品品名,
前日结存数量 =(select sum(case when 入出库='入库' then 交货数量 else 0 end) -
sum(case when 入出库='出库' then 交货数量 else 0 end)
from tb where 客户名称 = t.客户名称 and 产品品名 = t.产品品名 and 登记日期<'2010-05-20'),--(登记日期前一天以前的入库的交货数量合计-出库的交货数量合计),
本日入库数量 = sum(case when 入出库='入库' then 交货数量 else 0 end),--(登记日期那天的入库数量合计),
本日出库数量 = sum(case when 入出库='出库' then 交货数量 else 0 end),--(登记日期那天的出库数量合计),
本日结存数量 = (select sum(case when 入出库='入库' then 交货数量 else 0 end) -
sum(case when 入出库='出库' then 交货数量 else 0 end)
from tb where 客户名称 = t.客户名称 and 产品品名 = t.产品品名 and 登记日期<='2010-05-20') --(前日结存数量+本日入库数量-本日出库数量)
from tb t
where 登记日期='2010-05-20'
group by 客户名称,产品品名,登记日期

客户名称 产品品名 前日结存数量 本日入库数量 本日出库数量 本日结存数量
A A1 30 10 5 35
B B1 30 10 5 35

以下两条记录没有检索出来呀:
select '入库',' C',' C1', 30 ,'2010-05-19' union all
select '入库',' D',' D1', 30 ,'2010-05-19'
永生天地 2010-05-25
  • 打赏
  • 举报
回复

create table tb(
入出库 varchar(4), 客户名称 varchar(4),产品品名 varchar(4), 交货数量 int, 登记日期 datetime)
insert into tb
select '入库',' A',' A1', 30 ,'2010-05-19' union all
select '入库',' A',' A1', 10 ,'2010-05-20' union all
select '出库',' A',' A1', 5 ,'2010-05-20' union all
select '入库',' B',' B1', 30 ,'2010-05-19' union all
select '入库',' B',' B1', 10 ,'2010-05-20' union all
select '出库',' B',' B1', 5 ,'2010-05-20'



select 客户名称,产品品名,
前日结存数量 =(select sum(case when 入出库='入库' then 交货数量 else 0 end) -
sum(case when 入出库='出库' then 交货数量 else 0 end)
from tb where 客户名称 = t.客户名称 and 产品品名 = t.产品品名 and 登记日期<'2010-05-20'),--(登记日期前一天以前的入库的交货数量合计-出库的交货数量合计),
本日入库数量 = sum(case when 入出库='入库' then 交货数量 else 0 end),--(登记日期那天的入库数量合计),
本日出库数量 = sum(case when 入出库='出库' then 交货数量 else 0 end),--(登记日期那天的出库数量合计),
本日结存数量 = (select sum(case when 入出库='入库' then 交货数量 else 0 end) -
sum(case when 入出库='出库' then 交货数量 else 0 end)
from tb where 客户名称 = t.客户名称 and 产品品名 = t.产品品名 and 登记日期<='2010-05-20') --(前日结存数量+本日入库数量-本日出库数量)
from tb t
where 登记日期='2010-05-20'
group by 客户名称,产品品名,登记日期

/*客户名称 产品品名 前日结存数量 本日入库数量 本日出库数量 本日结存数量
---- ---- ----------- ----------- ----------- -----------
A A1 30 10 5 35
B B1 30 10 5 35

(所影响的行数为 2 行)

*/
drop table tb
xuw 2010-05-25
  • 打赏
  • 举报
回复
xys_777:
你给的我试了一下,有点问题。我想要的结果如下:
入出库 客户名称 产品品名 交货数量 登记日期
入库 A A1 30 2010-05-19
入库 A A1 10 2010-05-20
出库 A A1 5 2010-05-20
入库 B B1 30 2010-05-19
入库 B B1 10 2010-05-20
出库 B B1 5 2010-05-20

登记日期=2010-05-20时的检索结果为:
客户名称,产品品名,前日结存数量,本日入库数量,本日出库数量,本日结存数量
A A1 30 10 5 35
B B1 30 10 5 35

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧