导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

行转列问题

itliyi 2014-06-11 04:00:16

查询结果
班级 项目 人数
1班 立定跳远 总:10 通过:1
1班 跑步 总:10 通过:9

能否转换成如下

班级 立定跳远 跑步
1班 总:10 通过:1 总:10 通过:9

thks

...全文
110 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
netajax1 2014-06-11
发给我看干嘛我暂时不会
回复
exception92 2014-06-11
引用 7 楼 galenkeny 的回复:
行转列在这个论坛估计是不是问的次数最多的问题了?
我看是,建议版主 搞一个专题,并置顶。
回复
行转列在这个论坛估计是不是问的次数最多的问题了?
回复
在路上_- 2014-06-11
借用版主数据

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
*/
回复
itliyi 2014-06-11
引用 2 楼 DBA_Huangzj 的回复:
----------------------------------------------------------------
-- 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
*/
多谢大神
回复
在路上_- 2014-06-11
试试

select 班级, max(case 项目 when '立定跳远' then 人数 end) 立定跳远,
  max(case 项目 when '跑步' then 人数 end) 跑步
from 表
group by 班级
回复
發糞塗牆 2014-06-11
行转列可以看看这篇文章:http://www.cnblogs.com/gaizai/p/3753296.html
回复
發糞塗牆 2014-06-11
----------------------------------------------------------------
-- 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
*/
回复
itliyi 2014-06-11
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告