回 帖 发 新 帖 刷新版面

主题:关于SELECT-SQL

我用下列语句统计
SELECT orespec as "规格",LEFT(date,7) as "日期", SUM(output) as "产量" FROM MyTable ORDER BY 1,2 GROUP BY 1,2
统计没有问题,问题是:如果某一规格某月中的产量为0时,统计结果中就不出现相应的“行”,
这样一来,统计一年的数据,有的规格为12行,有的规格为10行,当我把结果输出到一个表中,再想打印出来时,就要对数据进行更多的判断。

我想问一下,有没有办法让求和结果为0的行也加入到统计结果中,即
统计一年数据,每种规格的都是12行,产量为0的月份加入一行,产量值为0

回复列表 (共5个回复)

沙发

CREATE CURSOR tempyf(yf c(7))
FOR i=1 TO 12
    INSERT INTO tempyf(yf) VALUES('2009.'+PADL(ALLTRIM(STR(i)),2,'0'))
ENDFOR
SELECT tempyf.yf,orespec as 规格, SUM(output) as 产量;
    FROM tempyf LEFT OUTER JOIN MyTable;
    ON tempyf.yf=LEFT(DTOC(MyTable.date),7);
    GROUP BY 1,2

板凳

经过试验,发现并不会过滤统计的零值。
不知道其中是不是有版本或设置之类的误会存在。

3 楼

回1楼
运行结果,问题依然存在,结果和没建临时表时一样,不知是不是象2楼讲的存在设置上的问题。

4 楼

楼主的表中每种规格每月有产量时有记录,没有产量时没记录,这样一来肯定统计结果会出现楼主所说的问题。
要解决这个问题,就必须进行连接查询统计,即另设一表,里面只有一个月份字段,两表进行左连接(将新建的这个表放在左边)即可得到想要的统计结果。
本想法没有经过调试,仅供参考,但肯定是解决问题的一条途径。

5 楼

回4楼
1楼的方法就是建立一个临时表,表中有一个字段,表示年月,并用的是左连接,
我试过,没有得到想要的结果.
有没有别的方法,给个思路也行.

我现在用的是一个月一个月的统计的方法,我怕等到表中的数据增加到一定程度后,运行速度会明显下降.

我来回复

您尚未登录,请登录后再回复。点此登录或注册