关于多表查询统计问题?(祝各位新年快乐!)
表1:
编号 标志 使用人 时间 代号
10001 1 李山 2007-01-06 2001
10002 1 李山 2007-01-09 2001
10005 2 李山 2007-01-09 2002
10007 2 赵兴 2007-01-08 2002
10009 2 赵兴 2007-01-08 2002
10010 1 张立 2007-01-12 2003
10011 1 张立 2007-01-12 2003
10012 1 张立 2007-01-20 2004
表2:
代号 部门
2001 一车间
2002 一车间
2003 二车间
2004 二车间
2005 三车间
表3:
编号 时间
10001 2007-02-08
10001 2007-02-09
10002 2007-01-10
10005 2007-01-11
10005 2007-01-09
10007 2007-01-10
10008 2007-01-10
10009 2007-01-09
10011 2007-01-12
10012 2007-01-20
我想分别统计出:在表一中 '使用人 '当 '标志 '分别等于1和2,并且时间在2007-01-06至2007-01-20之间在表二中 '部门 '等于 '一车间 '的 '编号 '数,以及按上述条件外再加上在2007-01-06至2007-01-20之间表一中的 '编号 '在表三中存在的条件。根据所列数据得到结果如下:
使用人 tj1 tj2 tj3 tj4
李山 2 1 1 1
赵兴 0 2 0 2
tj1为标志等于1的编号数,tj2为标志等于2的编号数,tj3为在表3存且标志等于1的编号数,tj4为在表3存且标志等于2的编号数,我写的代码如下:
SELECT 表1.使用人, SUM(CASE WHEN 表1.标志 = '1 ' THEN 1 ELSE 0 END) AS tj1, SUM(CASE WHEN 表1.标志 = '2 ' THEN 1 ELSE 0 END) AS tj2,SUM(CASE WHEN 表1.标志 = '1 ' and 表1.编号 in (select 表3.编号 from 表3 where 表3.时间> = '2007-01-01 ' and 表3.时间 <= '2007-02-15 ') THEN 1 ELSE 0 END) AS tj3,SUM(CASE WHEN 表1.标志 = '2 ' and 表1.编号 in (select 表3.编号 from 表3 where 表3.时间> = '2007-01-01 ' and 表3.时间 <= '2007-02-15 ') THEN 1 ELSE 0 END) AS tj4
FROM gwkh INNER JOIN
wdh ON 表1.代码 = 表2.代码 AND 表2.部门 = '一车间 '
WHERE (表1.时间 > = '2007-01-01 ') AND (表1.时间 <= '2007-02-15 ')
GROUP BY 表1.使用人
ORDER BY 表1.使用人
但出错提示“不能对包含聚合或子查询的表达式执行聚合函数”望前辈指教,并祝春节快乐!!
[解决办法]
select 使用人,
tj1=(select count(1) from 表1 where 使用人=a.使用人 and 标志= '1 '
and 时间 between '2007-01-06 ' and '2007-01-20 ' and 代号 in (select 代号 from 表2)),
tj2=(select count(1) from 表1 where 使用人=a.使用人 and 标志= '2 '
and 时间 between '2007-01-06 ' and '2007-01-20 ' and 代号 in (select 代号 from 表2)),
tj3=(select count(1) from 表1 where 使用人=a.使用人 and 标志= '1 '
and 时间 between '2007-01-06 ' and '2007-01-20 ' and 代号 in (select 代号 from 表2) and 编号 in (select 编号 from 表3 where 时间 between '2007-01-06 ' and '2007-01-20 ')),
tj4=(select count(1) from 表1 where 使用人=a.使用人 and 标志= '2 '
and 时间 between '2007-01-06 ' and '2007-01-20 ' and 代号 in (select 代号 from 表2) and 编号 in (select 编号 from 表3 where 时间 between '2007-01-06 ' and '2007-01-20 '))
from 表1 a group by 使用人