34,838
社区成员




查询结果
班级 项目 人数
1班 立定跳远 总:10 通过:1
1班 跑步 总:10 通过:9
能否转换成如下
班级 立定跳远 跑步
1班 总:10 通过:1 总:10 通过:9
create table [huang]([班级] nvarchar(4),[项目] nvarchar(8),[人数] nvarchar(10))
insert [huang]
select N'1班',N'立定跳远',N'总:10 通过:1' union all
select N'1班',N'跑步',N'总:10 通过:9'
select 班级, max(case 项目 when '立定跳远' then 人数 end) 立定跳远,
max(case 项目 when '跑步' then 人数 end) 跑步
from huang
group by 班级
drop table huang;
/*
班级 立定跳远 跑步
---- ---------- ----------
1班 总:10 通过:1 总:10 通过:9
*/
select 班级, max(case 项目 when '立定跳远' then 人数 end) 立定跳远,
max(case 项目 when '跑步' then 人数 end) 跑步
from 表
group by 班级
----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-06-11 16:06:20
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([班级] nvarchar(4),[项目] nvarchar(8),[人数] nvarchar(10))
insert [huang]
select N'1班',N'立定跳远',N'总:10 通过:1' union all
select N'1班',N'跑步',N'总:10 通过:9'
--------------生成数据--------------------------
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([项目])+N'=max(case when [项目]=N'+quotename([项目],'''')+N' then [人数] else null end)'
from [huang] group by [项目]
exec(N'select [班级]'+@s+N' from [huang] group by [班级]')
----------------结果----------------------------
/*
班级 立定跳远 跑步
---- ---------- ----------
1班 总:10 通过:1 总:10 通过:9
*/