请教一个sql查询问题,可能要用到2次count和2次groupby

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:10:08
我举例一下:
表一:voucher表
会计期间,凭证号
200506,A0001
200506,A0002
200506,A0003
200507,A0004
200507,A0005

表二:details表
凭证号,明细号
A0001,M0001
A0001,M0002
A0002,M0003
A0003,M0004
A0003,M0005
A0003,M0006
A0004,M0007
A0004,M0008
A0005,M0009
A0005,M0010
A0005,M0011
A0005,M0012
A0005,M0013

如果我用sql语句查询
select 会计期间,count(*)
from voucher group by 会计期间
order by 会计期间
结果如下:
会计期间,凭证数量汇总
200506,3
200507,2

如果我用sql语句查询
select v.会计期间,count(*)
from voucher v, details d
where v.凭证号=d.凭证号
group by v.会计期间
order by v.会计期间
结果如下:
会计期间,明细数量汇总
200506,6
200507,7

现在问题来了,查询着2个结果需要2个sql语句。
有没有一个select语句,能够实现会计期间,凭证数量汇总,明细数量汇总一次查询的情况?

需要的结果如下:
会计期间,凭证数量汇总,明细数量汇总
200506,3,6
200507,2,7

这个不难啊,可以直接把这两个结果连起来啊,把查询的结果作为一个临时视图
select * from
(select 会计期间 temp1time,count(*)
from voucher group by 会计期间
order by 会计期间 )temp1 ,
(select v.会计期间 temp2time,count(*)
from voucher v, details d
where v.凭证号=d.凭证号
group by v.会计期间
order by v.会计期间 )temp2 where temp1time=temp2time

select a.kjqj as '会计期间',a.sm as '凭证数量汇总',b.sm as '明细数量汇总'
from
(
select kjqj,count(*) as sm
from #voucher
group by kjqj
) a
left join
(
select kjqj,count(*) as sm
from(
select a.*,b.mxh
from #voucher a left join #details b
on a.pzh=b.pzh
) a
group by kjqj

) b
on a.kjqj=b.kjqj

兄弟 我那 表是创建的临时表 ,如果你用直接在你的库上把表明替换掉,就可以了 ,我在我的库上次是过了 ,可以得到你想要的结果,如果有疑问可以随时问我, KJQJ 表示会计期间 ,PZH 表示 凭证号,MXH 表示 明细好

SELECT b.凭证号,count(1),m_c FROM (SELECT 凭证号,count(1)as m_c FROM details group by 凭证号) A,voucher B
WHERE A.