是不是下面这个:
select 品名,加工厂簡稱,sum(入數數量) as 累計數量
from table
where datepart(yyyy,完工收回日期)=2001
group by 品名,加工厂簡稱
select 品名,加工厂簡稱,sum(入數數量) as 累計數量
from table
where datepart(yyyy,完工收回日期)=2001
group by 品名,加工厂簡稱
可写为:
select 品名,datepart(yyyy,完工收回日期),加工厂簡稱,sum(入數數量) as 累計數量
from a
group by 品名,datepart(yyyy,完工收回日期),加工厂簡稱;完成逐年统计
group by 可跟多个字段,但 select 中只能为分组字段和聚合运算字段:如sum(入數數量)、
avg(入數數量)、count( distinct 品名 )下面sql便错了:
select 品名,datepart(yyyy,完工收回日期),加工厂簡稱,sum(入數數量) as 累計數量
from a
group by 品名加工厂簡稱;
from table
where 完工收回日期 between to_date('20010101','yyyymmdd') and to_date('20020101','yyyymmdd')
group by 加工厂簡稱,品名
我以 MS SQL 的 pubs 库 sales 表为例写个相同功能的句子(已经试过)
楼上的兄弟可以试试:
select datepart(yyyy,ord_date),count(distinct title_id),sum(qyt),stor_id
from sales
group by datepart(yyyy,ord_date),stor_id ;
但在統計時我要按以下列式列出:品名 完工收回日期 入庫憑証號 入數數量 加工厂簡稱 累計數量
bb 2001/1/1 xxxx 30 cc 30
bb 2001/3/1 uuuu 50 cc 80
bb 2001/6/6 iiii 10 yy 10
bb 2001/6/8 pppp 20 yy 30
各位再想想辦法.
CREATE PROCEDURE BBB
@DAT CHAR(10),
@PINM CHAR(20),
@JGCJC CHAR(20)
AS
BEGIN
DECLARE @TMEPINT INT
DECLARE @MAX INT
DECLARE AAA CURSOR AS
SELECT 累计数量 FROM A
WHERE CAST(YEAR(完工收回日期)AS CHAR(10))=@DAT AND 品名=@PINM
AND 加工厂简称=@JGCJC
OPEN AAA
FETCH NEXT FROM AAA INTO @TEMPINT
SELECT @MAX=@TEMPINT
WHILE @@FETCH_STATUS=0
BEGIN
IF @MAX<@TEMPINT
BEGIN
SELECT @MAX=@TEMPINT
FETCH NEXT FROM AAA INTO @TEMPINT
ELSE
FETCH NEXT FROM AAA INTO @TEMPINT
END
SELECT * INTO FROM A WHERE 累计数量=@MAX
END
sheng的表中无"累计数量"字段,"累计数量"只是"入数数量"的特定条件计算列如果要得到如此结果可以实现:
品名 完工收回日期 入庫憑証號 入數數量 加工厂簡稱 累計數量
bb 2001/1/1 xxxx 30 cc 30 110
bb 2001/3/1 uuuu 50 cc 80 110
bb 2001/6/6 iiii 10 yy 10 110
bb 2001/6/8 pppp 20 yy 30 110
rows 4品名 完工收回日期 入庫憑証號 入數數量 加工厂簡稱 累計數量
aa 2001/1/3 xxxx 30 cc 10 50
aa 2001/2/1 uuuu 50 cc 40 50rows 2但如:
品名 完工收回日期 入庫憑証號 入數數量 加工厂簡稱 累計數量
bb 2001/1/1 xxxx 30 cc 30 110
bb 2001/3/1 uuuu 50 cc 80 110
bb 2001/6/6 iiii 10 yy 10 110
bb 2001/6/8 pppp 20 yy 30 110
aa 2001/1/3 xxxx 30 cc 10 50
aa 2001/2/1 uuuu 50 cc 40 50rows 6
我认为不可实现,你可问问三千,竹之草等大虾
品名 完工收回日期 入庫憑証號 入數數量 加工厂簡稱
bb 2001/1/1 xxxx 30 cc
bb 2001/3/1 uuuu 50 cc
bb 2001/6/6 iiii 10 yy
bb 2001/6/8 pppp 20 yy
我要的是這樣統計:
品名 完工收回日期 入庫憑証號 入數數量 加工厂簡稱 累計數量
bb 2001/1/1 xxxx 30 cc 30
bb 2001/3/1 uuuu 50 cc 80
bb 2001/4/1 uuuu 50 cc 130
bb 2001/6/6 iiii 10 yy 10
bb 2001/6/8 pppp 20 yy 30
"累計數量"分別各個加工厂 品名逐累計﹐始于本年度初﹐止于本年度末。
和你的问题基本一样!
我通过触发器实现的
表结构为:品名 完工收回日期 入庫憑証號 入數數量 加工厂簡稱 累計數量
做一个插入触发器
插入数据为: 1) bb 2001/1/1 xxxx 30 cc 0
将 30+0 写入累計數量,通过 bb,cc,2001为where条件实现控制逐年累计
2) bb 2001/3/1 uuuu 50 cc 0
将 50+30 写入累計數量,通过 bb,cc,2001为where条件实现控制逐年累计 其中 0,30为插入时最大时间的 累計數量列值
如果用触發器,
品名 完工收回日期 入庫憑証號 入數數量 加工厂簡稱 累計數量
bb 2001/1/1 xxxx 30 cc 30
bb 2001/3/1 uuuu 50 cc 80
bb 2001/4/1 uuuu 50 cc 130
bb 2001/6/6 iiii 10 yy 10
bb 2001/6/8 pppp 20 yy 30
如果把2001/3/1的50修改為100,那2001/4/1的累計數量130又要修改為180,要是數据量很大這樣處理速度會很慢