行转列问题

itliyi 2014-06-11 04:00:16

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

能否转换成如下

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

thks

...全文
188 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
netajax1 2014-06-11
  • 打赏
  • 举报
回复
发给我看干嘛我暂时不会
  • 打赏
  • 举报
回复
引用 7 楼 galenkeny 的回复:
行转列在这个论坛估计是不是问的次数最多的问题了?
我看是,建议版主 搞一个专题,并置顶。
以学习为目的 2014-06-11
  • 打赏
  • 举报
回复
行转列在这个论坛估计是不是问的次数最多的问题了?
在路上_- 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
  • 打赏
  • 举报
回复

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧