union all和group by怎么结合?

时间:2022-04-19 20:10:37
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj


如果对以上的记录再按wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj 进行汇总,语句该怎么写啊?

16 个解决方案

#1


select 写你的字段
from
(
)a
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#2


select group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,sum().... from 

(
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
) a group by group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#3


select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj from
(
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj from t1
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj from t2
)a
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#4


select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) a
union all
select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) b
union all
select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) c

#5


select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) a
union all
select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) b
union all
select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) c

#6


select wl_wlid ,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sqjcsl,sqjcdw,bqrksl,bqrkdw,bqcksl,bqckdw,bqjcsl,bqjcdw From 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
)A
group by wl_wlid ,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj


Server: Msg 8156, Level 16, State 1, Line 1
The column 'bqrkdw' was specified multiple times for 'A'.

#7


晕,没写全。
跟楼上基本一致
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
sum(..),max(..),..
from
(
  你原由的sql语句
)a
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#8


原来的语句应该是:
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj


写成:
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,sqjcsl,sqjcdw,bqrksl,bqrkdw,bqcksl,bqckdw,bqjcsl,bqjcdw from 
(
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
) a 
 group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj


Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.sqjcsl' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.sqjcdw' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqrksl' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqrkdw' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqcksl' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqckdw' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqjcsl' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqjcdw' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


#9


Server: Msg 8156, Level 16, State 1, Line 1
The column 'bqrkdw' was specified multiple times for 'A'.
===
你这个字段出现多次吗?

类似:
create table tb1(a int,b varchar(2))
insert into tb1
select 10,'01' union all
select 20, '01' union all
select 30,'02'
create table tb2 (a int,b varchar(2))
insert into tb2
select 40,'01' union all
select 50, '02' union all
select 60 ,'03'

select a=sum(a),b from (
select a,b from tb1
union all
select a,b from tb2)a
group by b
drop table tb1,tb2

===
a           b    
----------- ---- 
70          01
80          02
60          03

#10


我想楼主似乎没对group by 整明白。
如楼上:
wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj 进行分组,那么你select字段中除了这些字段外的其他字段必须要写在聚合函数中的。

#11


第一次写错了,出现了两次
正确的原文应该是:

select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#12


谢谢各位!
这样写是否正确了?
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,sum(sqjcsl),sum(sqjcdw),sum(bqrksl),sum(bqrkdw),sum(bqcksl),
sum(bqckdw),sum(bqjcsl),sum(bqjcdw) from 
(
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
) a 
 group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#13


就是这样的了,没报错就行

#14


应该是没问题了吧,按你的要求,应该你最后写的可以得到正确答案了。

#15


问题解决。结帖给分

#16


up

#1


select 写你的字段
from
(
)a
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#2


select group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,sum().... from 

(
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
) a group by group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#3


select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj from
(
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj from t1
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj from t2
)a
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#4


select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) a
union all
select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) b
union all
select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) c

#5


select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) a
union all
select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) b
union all
select * from 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj) c

#6


select wl_wlid ,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sqjcsl,sqjcdw,bqrksl,bqrkdw,bqcksl,bqckdw,bqjcsl,bqjcdw From 
(select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqrkdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
)A
group by wl_wlid ,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj


Server: Msg 8156, Level 16, State 1, Line 1
The column 'bqrkdw' was specified multiple times for 'A'.

#7


晕,没写全。
跟楼上基本一致
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
sum(..),max(..),..
from
(
  你原由的sql语句
)a
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#8


原来的语句应该是:
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj


写成:
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,sqjcsl,sqjcdw,bqrksl,bqrkdw,bqcksl,bqckdw,bqjcsl,bqjcdw from 
(
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
) a 
 group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj


Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.sqjcsl' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.sqjcdw' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqrksl' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqrkdw' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqcksl' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqckdw' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqjcsl' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column 'a.bqjcdw' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


#9


Server: Msg 8156, Level 16, State 1, Line 1
The column 'bqrkdw' was specified multiple times for 'A'.
===
你这个字段出现多次吗?

类似:
create table tb1(a int,b varchar(2))
insert into tb1
select 10,'01' union all
select 20, '01' union all
select 30,'02'
create table tb2 (a int,b varchar(2))
insert into tb2
select 40,'01' union all
select 50, '02' union all
select 60 ,'03'

select a=sum(a),b from (
select a,b from tb1
union all
select a,b from tb2)a
group by b
drop table tb1,tb2

===
a           b    
----------- ---- 
70          01
80          02
60          03

#10


我想楼主似乎没对group by 整明白。
如楼上:
wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj 进行分组,那么你select字段中除了这些字段外的其他字段必须要写在聚合函数中的。

#11


第一次写错了,出现了两次
正确的原文应该是:

select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#12


谢谢各位!
这样写是否正确了?
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,sum(sqjcsl),sum(sqjcdw),sum(bqrksl),sum(bqrkdw),sum(bqcksl),
sum(bqckdw),sum(bqjcsl),sum(bqjcdw) from 
(
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,sum(kcsw_rksl)-sum(kcsw_cksl) as sqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as sqjcdw, 0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw,0 as bqjcsl,0 as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <'20041219' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj,0 as sqjcsl,0 as sqjcdw,sum(kcsw_rksl) as bqrksl,sum(kcsw_rkdw) as bqrkdw ,sum(kcsw_cksl) as bqcksl,sum(kcsw_ckdw) as bqckdw,0 as bqjcsl,0 as bqjcdw
 from  kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq between '20041220' and '20041220' 
group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
union all
select wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj ,0 as sqjcsl,0 as sqjcdw,0 as bqrksl,0 as bqrkdw,0 as bqcksl,0 as bqckdw ,sum(kcsw_rksl)-sum(kcsw_cksl) as bqjcsl ,sum(kcsw_rkdw)-sum(kcsw_rkdw) as bqjcdw
from kcsw ,wl where kcsw_wlid=wl_wlid and kcsw_jzrq <='20041220' group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj
) a 
 group by wl_wlid,kcsw_ph,wl_mc,wl_gg,wl_cz,wl_dj

#13


就是这样的了,没报错就行

#14


应该是没问题了吧,按你的要求,应该你最后写的可以得到正确答案了。

#15


问题解决。结帖给分

#16


up