请sql高手写一句查询(200分)

  • 主题发起人 主题发起人 sdjxmikill
  • 开始时间 开始时间
S

sdjxmikill

Unregistered / Unconfirmed
GUEST, unregistred user!
表table1: id 部门 月生产量 生产日期 (注释:每月每部门只有一条记录)
1 A 100 2008-8-1
2 A 100 2008-7-1
3 B 150 2008-8-1
4 C 40 2008-8-1
5 C 120 2008-7-1
6 C 1 2008-6-1
7 C 1 2008-5-1
自动查询当月记录,结果生成临时表table2:
id 部门 月生产量 年生产量累计 日期
1 A 100 200 2008-8-1
2 B 150 150 2008-8-1
3 C 40 162 2008-8-1
 
SELECT * from table1 WHERE YEAR(日期)=year(getdate()) and month(日期)=month(getdate())
 
你的月生产量 和 年生产量 汇总的日期范围是不同的,无法在一个查询里实现
如果是在DELPHI里,我会使用adoquery控件新建一个动态计算字段。或者通过程序先查询建一个表,再第二次查询时把年累计赋上去。
其实在查年累计时,也可以汇总到一个表里,这样在遍历月生产量时,可以直接定位到年累计表的对应记录,就比每次都要查询效率高
 
我想放到存储过程里,这是个自连表问题比较棘手。还请高手指点
 
我帮你解决,加我QQ 28609515
 
在Oracle中可以这样写(Sql好像没有rownum吧,不过也很简单的):
select rownum id,a.部门,a.年生产量累计,b.月生产量,a.生产日期 from (select 部门,max(生产日期) 生产日期,sum(月生产量) 年生产量累计 from table1
group by 部门) a,table1 b
where b.部门(+)=a.部门 and b.生产日期(+)=a.生产日期
order by a.部门
 
感谢:cailingbo
正解如下:

SELECT b.id, b.部门, b.本月产量, b.生产日期, a.aa
FROM TEST1 AS b INNER JOIN
(SELECT 部门, SUM(本月产量) AS aa
FROM TEST1
GROUP BY 部门) AS a ON b.部门 = a.部门WHERE (YEAR(b.生产日期) = YEAR(GETDATE())) AND (MONTH(b.生产日期) = MONTH(GETDATE()))
 
后退
顶部