问题出自:http://community.youkuaiyun.com/Expert/topic/3495/3495537.xml?temp=.9028894
原来表内容:
姓名 年龄 班级
----- ----------- ----------
张三 11 高一(2)
李四 12 高一(1)
王五 12 高一(2)
赵六 12 高一(2)
想得到的结果:
高一(1) 高一(2)
----------- -----------
1 3
--
测试:
create
table
tb(姓名
varchar
(
5
), 年龄
int
, 班级
varchar
(
10
))
insert
into
tb
select
'
张三
'
,
11
,
'
高一(2)
'
union
all
select
'
李四
'
,
12
,
'
高一(1)
'
union
all
select
'
王五
'
,
12
,
'
高一(2)
'
union
all
select
'
赵六
'
,
12
,
'
高一(2)
'

--
原始数据
select
*
from
tb

--
如果班级并不多,可以静态指出列的个数
select
'
高一(1)
'
=
sum
(
case
when
班级
=
'
高一(1)
'
then
1
else
0
end
),
'
高一(2)
'
=
sum
(
case
when
班级
=
'
高一(2)
'
then
1
else
0
end
)
from
tb

--
如果班级比较多,而且不知道班级名称,使用下面动态语句
declare
@sql
varchar
(
8000
)
set
@sql
=
''
select
@sql
=
case
when
@sql
=
''
then
@sql
+
'
sum(case 班级 when
'''
+
班级
+
'''
then 1 else 0 end) as [
'
+
班级
+
'
]
'
else
@sql
+
'
,sum(case 班级 when
'''
+
班级
+
'''
then 1 else 0 end) as [
'
+
班级
+
'
]
'
end
from
tb
group
by
班级
order
by
班级
asc
exec
(
'
select
'
+
@sql
+
'
from tb
'
)

--
删除测试表
drop
table
tb
文章来源于 http://www.cnblogs.com/zhangzs8896 版权归原作者所有