请教:SQL如何将表中几个字段属性相同的数据相加,并列出表中所有数据?

时间:2022-04-16 15:13:50
请教各位:
select kf,pjbm,cx,tycx,pjmc,mcbm,ggxh,kcsl,cbje,cbdj from part_actual 
表part_actual中存在一些kf,pjbm,cx相同的数据,怎么样可以实现kf,pjbm,cx相同的数据相加,并列出表中所有的数据?

10 个解决方案

#1


--啥意思??
select kf,pjbm,cx=sum(cx),tycx=sum(tycx),pjmc=sum(pjmc),mcbm=sum(mcbm),ggxh=sum(ggxh),kcsl=sum(kcsl),cbje=sum(cbje),cbdj=sum(cbdj) from part_actual 
group by 
kf,pjbm,cx

#2


select kf,pjbm,cx,tycx,pjmc,sum(kcsl) as kcslhj,sum(cbje) as cbje_hj,round(sum(cbje)/sum(kcsl),2) as cbdjh from part_actual where kcsl<>0 group by kf,pjbm,cx,tycx,pjmc
我写成上面的方法,但是列出字段不够,如果再加上就出现了错误。选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

#3


--你的Group by 后面是要非聚合函数的参数啊。


这样。。。。。。

select A,B,C,D,E=sum(E)
from 表
group by
       A,B,C,D

#4


谢谢,我在您发信息的时候网断了,结果我发完了以后才看到您的,不好意思,是我自己找的一个方法,但是我想这样的,
select A,B,C,D,E=sum(E)
from 表
group by
       A,B,C,D
这是您的方法,但是我想如果select A,B,C,D,E=sum(E) from 表 group by A,B,C怎么办呢?

#5


D 字段是什么类型的?
D字段加个聚合函数就可以了。比如Max,Min


select A,B,C,D=max(D),E=sum(E)
from 表
group by
       A,B,C

#6


如果D是varchar型的怎么办呢?

#7


D 加 max,min 均可以...你看这一列值,要怎么取值。。。。。

#8


select top 5 kf,pjbm,max(cx) as cx,max(pjmc) as pjmc,sum(kcsl) as kcsl,sum(cbje) as cbje,round(sum(cbje)/sum(kcsl),2) as cbdj from part_actual where kcsl<>0 group by kf,pjbm

kf   pjbm                                               cx                                                 pjmc                                               kcsl                                     cbje                                     cbdj                                     
---- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- 
8    02080618(改进型)                                      CJ6800G1C2H                                        后刹车分泵(左)                                           2.00                                     560.00                                   280.000000
8    0210238019                                         HH-DD6103HSC                                       机油表                                                1.00                                     190.00                                   190.000000
8    0211158005                                         CJ6800G1C2H/YC4110ZQ                               高压油泵弹簧上座圈                                          12.00                                    144.00                                   12.000000
8    0211158006                                         CJ6800G1C2H/YC4110ZQ                               高压油泵弹簧下座                                           16.00                                    272.00                                   17.000000
8    0211158007                                         CJ6800G1C2H/YC4110ZQ                               高压油泵储油阀弹簧                                          20.00                                    160.00                                   8.000000

(所影响的行数为 5 行)

是这样吧,不过,我就是有一点想不明白,如果我想列出表中的所有字段,但却只想利用其中的几个字段group by 怎么办呢?是不是必须得加聚合函数呢?应该是吧!

#9


其它字段必须加聚合函数,也要看你具体需求了。也可以用exists 来解决求最值问题。。。。

要看你具体业务需求俩。

#10


非常感谢,晚安!

#1


--啥意思??
select kf,pjbm,cx=sum(cx),tycx=sum(tycx),pjmc=sum(pjmc),mcbm=sum(mcbm),ggxh=sum(ggxh),kcsl=sum(kcsl),cbje=sum(cbje),cbdj=sum(cbdj) from part_actual 
group by 
kf,pjbm,cx

#2


select kf,pjbm,cx,tycx,pjmc,sum(kcsl) as kcslhj,sum(cbje) as cbje_hj,round(sum(cbje)/sum(kcsl),2) as cbdjh from part_actual where kcsl<>0 group by kf,pjbm,cx,tycx,pjmc
我写成上面的方法,但是列出字段不够,如果再加上就出现了错误。选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

#3


--你的Group by 后面是要非聚合函数的参数啊。


这样。。。。。。

select A,B,C,D,E=sum(E)
from 表
group by
       A,B,C,D

#4


谢谢,我在您发信息的时候网断了,结果我发完了以后才看到您的,不好意思,是我自己找的一个方法,但是我想这样的,
select A,B,C,D,E=sum(E)
from 表
group by
       A,B,C,D
这是您的方法,但是我想如果select A,B,C,D,E=sum(E) from 表 group by A,B,C怎么办呢?

#5


D 字段是什么类型的?
D字段加个聚合函数就可以了。比如Max,Min


select A,B,C,D=max(D),E=sum(E)
from 表
group by
       A,B,C

#6


如果D是varchar型的怎么办呢?

#7


D 加 max,min 均可以...你看这一列值,要怎么取值。。。。。

#8


select top 5 kf,pjbm,max(cx) as cx,max(pjmc) as pjmc,sum(kcsl) as kcsl,sum(cbje) as cbje,round(sum(cbje)/sum(kcsl),2) as cbdj from part_actual where kcsl<>0 group by kf,pjbm

kf   pjbm                                               cx                                                 pjmc                                               kcsl                                     cbje                                     cbdj                                     
---- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- 
8    02080618(改进型)                                      CJ6800G1C2H                                        后刹车分泵(左)                                           2.00                                     560.00                                   280.000000
8    0210238019                                         HH-DD6103HSC                                       机油表                                                1.00                                     190.00                                   190.000000
8    0211158005                                         CJ6800G1C2H/YC4110ZQ                               高压油泵弹簧上座圈                                          12.00                                    144.00                                   12.000000
8    0211158006                                         CJ6800G1C2H/YC4110ZQ                               高压油泵弹簧下座                                           16.00                                    272.00                                   17.000000
8    0211158007                                         CJ6800G1C2H/YC4110ZQ                               高压油泵储油阀弹簧                                          20.00                                    160.00                                   8.000000

(所影响的行数为 5 行)

是这样吧,不过,我就是有一点想不明白,如果我想列出表中的所有字段,但却只想利用其中的几个字段group by 怎么办呢?是不是必须得加聚合函数呢?应该是吧!

#9


其它字段必须加聚合函数,也要看你具体需求了。也可以用exists 来解决求最值问题。。。。

要看你具体业务需求俩。

#10


非常感谢,晚安!