日期:2014-05-17  浏览次数:20381 次

一个多列汇总查询问题,求大神
本帖最后由 pctonc 于 2012-12-14 16:48:53 编辑
表usserinf

userid  user_Identity user_MemberOrParty user_Organize
1000       0              1                  1
1001       1              2                  0
1002       2              1                  2
1003       1              0                  0
1004       1              1                  2
1005       2              2                  1

备注
user_Identity=0 表示默认
user_Identity=1 表示一般
user_Identity=2 表示普通

user_MemberOrParty=0 表示简单
user_MemberOrParty=1 表示复杂
user_MemberOrParty=2 表示超难

user_Organize=0 表示 甲
user_Organize=1 表示 乙
user_Organize=2 表示 丙
如何查询实现结果如下
结果一:
默认  一般 普通 简单 复杂 超难 甲 乙 丙
1      3    2    1    3    2    2  2  2

结果二:
默认   1
一般   3
普通   2
简单   1
复杂   3
超难   2
甲     2
乙     2
丙     2

------解决方案--------------------

--usserinf
if object_id('usserinf','u') is not null
drop table usserinf

go
create table usserinf
(
userid char(4),
user_Identity smallint,
user_MemberOrParty smallint,
user_Organize smallint
)

go
insert into usserinf values
('1000',0,1,1),
('1001',1,2,0),
('1002',2,1,2),
('1003',1,0,0),
('1004',1,1,2),
('1005',2,2,1)

go
--SQL
--结果一
select *from (
select '默认' 中文, count(默认) Tag  from(
select 
case when user_Identity=0 then user_Identity else null end 默认
from usserinf) A
where 默认 is not null union all
select '一般', count(一般) Tag  from(
select 
case when user_Identity=1 then user_Identity else null end 一般
from usserinf) A
where 一般 is not null union all
select '普通', count(普通) Tag  from(
selec