表work:
id A B C D
----------- ---------- ---------- ---------- ----------
1 zs ls zs ww
2 zs zs ww ww
3 ww ls ls zs
4 ww ww zs ls
5 ww ww ww zs
6 zs zs zs zs id 表示 工作项目
zs=张三
ls=李四
ww=王五想得到的结果是:name count(次数)
----------- ----------
zs 0
ls 0
ww 0
id A B C D
----------- ---------- ---------- ---------- ----------
1 zs ls zs ww
2 zs zs ww ww
3 ww ls ls zs
4 ww ww zs ls
5 ww ww ww zs
6 zs zs zs zs id 表示 工作项目
zs=张三
ls=李四
ww=王五想得到的结果是:name count(次数)
----------- ----------
zs 0
ls 0
ww 0
name,COUNT(*) AS cnt
FROM (
SELECT A AS name FROM tb
UNION ALL
SELECT B FROM tb
UNION ALL
SELECT C FROM tb
UNION ALL
SELECT D FROM tb
) AS A
GROUP BY name
1 2 3 4 是序号 就是要统计 所有name出现的次数
我用的MYSQL数据库 好像有错误
2,查询不方便我认为改成这样的表结构会更好一些: id name work
--- -------- -----
1 zs A
2 ls B
3 zs C
4 ww D
5 zs A
6 zs B
7 ww C
8 ww D
id a b c d
--- ------ ------ ------ ------
1 zs zs ww zs
2 ls . . ww
3 zs . . ls
4 ww . . ww
. zs . . zs
. zs . . ww
. ww . . zs
30 ww . . ls
这个是单月每个工作任务的详细情况
现在是想统计 每个员工这个月各个项目的工作的总次数
7楼的表再加一个时间字段,你的所有要求都能满足了,统计任何时间段,任何业务都很直观明了。
现有的表的条件下要完成你的要求,还是分成4句sql把。。非得写到一起确实是可以,不过语句会很庞大,而且就是为了拼接个输出的格式,没意思,懒得写。
select tb.a,count(*) from tb group by tb.a;
select tb.b,count(*) from tb group by tb.b;
select tb.c,count(*) from tb group by tb.c;
select tb.d,count(*) from tb group by tb.d;分别是a、b、c、d工作对于不同人的分类汇总。
GROUP BY