sql 查询怎么统计多个字段各自的个数

如一个表A如下:a表示主键(唯一)
a b c
# 一 三
@ 一 三
¥ 一 二
% 二 二
要统计 b c两个字段的个数
统计结果应该是这样b和c依次如下
个数 b
3 一
1 二

个数 c
2 三
2 二
以上的结果要一起显示出来 并且以两个字段的相同部分总和排序
字段不是整型的哦 都是varchar类型的啊

一种查询SQL如下, 利用union获得b和c各自的统计结果, 然后再一次统计整合到最终结果:

select sum(d.b_cnt) + sum(d.c_cnt) as total_cnt, sum(d.b_cnt) as b_cnt, case when sum(d.b_cnt) = 0 then '' else d.val end as b_label, sum(d.c_cnt) as c_cnt, case when sum(d.c_cnt) = 0 then '' else d.val end as c_label
from(
select b as val, count(b) as b_cnt, 0 as c_cnt
from A
group by b
union all
select c, 0, count(c) as c_cnt
from A
group by c
) d
group by d.val

SQL Serer上的测试结果(栏位次序有变化),

total_cnt为总数, b_label为b栏值, b_cnt为b栏个数, c_labe为c栏值, c_cnt为c栏个数.

 

这个结果跟字段是否为整型无关, 它是统计记录出现的次数.

追问

如果不是int类型的了 要是都是varchar类型的呢 这样就用不了sum了啊

追答

这个结果跟字段是否为整型无关, 它是统计记录出现的次数.
我测试用的数据都是字符串类型的, 只是最终的结果中次数值为整数值.

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-14
--所有算的地方都用cast(个数 as int)
create table test05
(a varchar(10),
b varchar(10),
c varchar(10))

insert into test05 select '#','一','三' union all
select '@','一','三' union all
select '¥','一','二' union all
select '%','二','二'
select * from test05

select b,COUNT(b) 个数 from test05 group by b
select c,COUNT(c) 个数 from test05 group by c

select SUM(isnull(t1.个数,0)+isnull(t2.个数,0)) 总数,sum(isnull(t1.个数,0)) 个数,t1.b,sum(isnull(t2.个数,0)) 个数,t2.c from 
( select b,COUNT(b) 个数 from test05 group by b ) as t1 full join
( select c,COUNT(c) 个数 from test05 group by c ) as t2 on t1.b=t2.c
group by t1.b,t2.c

追问

如果不是int类型的了 要是都是varchar类型的呢 这样就用不了sum了啊

追答

cast(个数 as int),用cast做转换,然后就可以计算了

追问

你答的也不错 重新给你个连接随便答下 让我采为满意答案吧http://zhidao.baidu.com/question/1540860129642282827.html

相似回答