数据库sql语句求助(200分)

  • 主题发起人 主题发起人 chenhui1970
  • 开始时间 开始时间
C

chenhui1970

Unregistered / Unconfirmed
GUEST, unregistred user!
我建立了一个企业生产销售数据库,包含两个table
table1是销售表,包含客户名称,销售日期,销售数量,
table2是生产表,包含生产日期,产量,
现在,如何编写SQL语句,使DBGRID表格显示每天的日期,产量,销售量,(有时没有生产,
但是每天都有销售),以及库存量如何显示(库存量为前一日库存量+当日产量-当日销售)
,求助各位大师!
 
select a.生产日期 日期,a.产量,b.销售量 from table2 a,table 1 where a.生产日期=
b.销售日期 order by a.生产日期
 
缺少一个库存表吧:
Select [产品ID],Convert(Char(10),GetDate(),111) [日期],
T2.[当日产量] [产量],T1.[当日销售] [销售量],
T3.[库存量]+T2.[当日产量]+T1.[当日销售] [库存量]
From [Table1销售表] T1,[table2生产表] T2,[table3库存表]
where T1.[产品ID]=T2.[产品ID] and T2.[产品ID]=T3.[产品ID]
and Convert(char(10),T1.[销售日期],111)=Convert(Char(10),GetDate(),111)
and Convert(char(10),T2.[生产日期],111)=Convert(Char(10),GetDate(),111)


 
以上的做法似乎都没有考虑到以下情况:
若某产品该日没有生产,而只销售了,则上式求出的答案有误!
请看下例:
select
产品ID,日期,sum(产量),sum(销售量) from
(select 产品ID,销售日期 日期,0 产量,销售量 销售量 from table1 where 日期=:rq
union
select 产品ID,生产日期 日期,生产产量 产量,0 销售量 from table2 where 日期=:rq)
group by 产品ID,日期
至于库存量则要有库存表才行。既然产量和销售量出来了,库存量应该不是问题了吧!!
实例如下:
select
产品ID,日期,sum(产量),sum(销售量),sum(昨日库存量),sum(昨日库存量)+sum(产量)-sum(销售量) from
(select 产品ID,销售日期 日期,0 产量,销售量 销售量,0 from table1 where 日期=:rq1
union
select 产品ID,生产日期 日期,生产产量 产量,0 销售量,0 from table2 where 日期=:rq1
union
select 产品ID,日期,0,0,库存量 from table3 where 日期=:rq2)
)
group by 产品ID,日期


 
如果要考虑数据集得大小问题,用外连接就可以了(左连接)。

Select [产品ID],Convert(Char(10),GetDate(),111) [日期],
T2.[当日产量] [产量],T1.[当日销售] [销售量],
T3.[库存量]+T2.[当日产量]+T1.[当日销售] [库存量]
From(Select * from [Table1销售表]
where Convert(char(10),[销售日期],111)=Convert(Char(10),GetDate(),111)
) T1 Left Outer join
(Select * from [table2生产表]
Where Convert(char(10),T2.[生产日期],111)=Convert(Char(10),GetDate(),111)
) T2 On T1.[产品ID]=T2.[产品ID] Inner Join
[table3库存表] T2 On T1.[产品ID]=T3.[产品ID]
 
同意TYZhang下一步的左连接方法,否则仍然可能不会是预期结果
 
后退
顶部