+ -
当前位置:首页 → 问答吧 → 求一个汇总求和的 SQL

求一个汇总求和的 SQL

时间:2011-11-08

来源:互联网

表: T1 
列: A1 ,A2,A3,A4,A5,A6,A7,A8,A9,A10,……,A49,A50  
   
  其中,列 A6 是金额型的,现在要生成 一个分组求和表 T2(对A6列求和),按 T1的某些列(比如 A2,A7,A9)分组

下面这个语句,总报错:

select *,sum(A6) into T2 group by A2,A7,A9

报错显示,某些列没有包含在聚合函数或 GROUP BY 子句中

难道要把所有的列都写入 GROUP BY 子句中 ?

作者: eminena   发布时间: 2011-11-08

SQL code
select A2,A7,A9,sum(A6) into T2 group by A2,A7,A9

作者: ssp2009   发布时间: 2011-11-08

SQL code
ct A2,A7,A9,sum(A6) into T2 group by A2,A7,A9
或其它字段都用max()

作者: q465897859   发布时间: 2011-11-08

SQL code

select A2,A7,A9,sum(A6) as A6
into T2 group by A2,A7,A9



不要重复发帖!

作者: AcHerat   发布时间: 2011-11-08

SQL code
select A2,A7,A9,sum(A6) into T2 group by A2,A7,A9

作者: fredrickhu   发布时间: 2011-11-08

统计查询基本格式:
select 分组的列,统计的值 from tb group by 分组列
你的查询:
select A2,A7,A9,sum(A6) from tb group by A2,A7,A9



作者: qianjin036a   发布时间: 2011-11-08

既然是分组,那么当结果中存在A2,A7,A9这3列值都一样的多条记录的时候,比如:
A1 A2 A7 A9
1 2 3 4
2 2 3 4
那么这个时候数据库就不知道到你到底是想要显示值为1的A1还是值为2的A1了,所以你必须告诉数据库你想要的时候,简单的一个*会让数据库不知所措的……

作者: CainLai   发布时间: 2011-11-08

一直没有整明白楼的需求是什么,我写了一个例子做测试,可是结果就是简单的排了一下序,根本就没有求和的过程啊。
SQL code
CREATE TABLE Ctemp1
(
       A1 varchar(10),
       A2 varchar(10),
       A3 varchar(10),
       A4 varchar(10),
       A5 varchar(10),
       A6 int,
       A7 varchar(10),
       A8 varchar(10),
       A9 varchar(10),
)

INSERT INTO Ctemp(A1,A2,A3,A4,A5,A6,A7,A8,A9)VALUES('a1','b1','c1','d1','e1',5,'f1','g1','h1')
INSERT INTO Ctemp(A1,A2,A3,A4,A5,A6,A7,A8,A9)VALUES('a2','b2','c2','d2','e2',10,'f2','g2','h2')
INSERT INTO Ctemp(A1,A2,A3,A4,A5,A6,A7,A8,A9)VALUES('a3','b3','c3','d3','e3',15,'f3','g3','h3')
INSERT INTO Ctemp(A1,A2,A3,A4,A5,A6,A7,A8,A9)VALUES('a4','b4','c4','d4','e4',55,'f4','g4','h4')
INSERT INTO Ctemp(A1,A2,A3,A4,A5,A6,A7,A8,A9)VALUES('a5','b5','c5','d5','e5',51,'f5','g5','h5')


SQL code
SELECT a1,a2,(sum(a6)) AS a10 FROM Ctemp GROUP BY a1,a2



结果如下:
a1 b1 5
a2 b1 51
a1 b2 15
a2 b2 10
a4 b4 55

最后一列为和,这个根本就不可能求出和啊。感觉没有意义啊。如果是这样的话,哪为什么不用order by 呢

作者: chenguang79   发布时间: 2011-11-08

分组统计,select选择的列必须是在group by里的,如果没有在group by里,那么必须用上max 或min函数

作者: pengxuan   发布时间: 2011-11-08

select A2,A7,A9,sum(A6) into T2 group by A2,A7,A9

作者: kouyiSC   发布时间: 2011-11-08

分太多了这孩子...

作者: geniuswjt   发布时间: 2011-11-08

SQL code

select *,sum(A6) over(partition by A2,A7,A9 ) into T2 from T1
select * from T2


group by 不行可以考虑 上面的partition by..因为他不需要把所有列都放到..分组列里

作者: public0011   发布时间: 2011-11-08