来一个动态行转列····

wu5224311 2013-03-04 11:15:05
表里有数据···
学年 课程
1 语文
1 数学
1 英语



要求横向动态输出
语文 数学 英语
...全文
309 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Nice 2013-03-05
  • 打赏
  • 举报
回复
引用 20 楼 wu5224311 的回复:
引用 11 楼 OrchidCat 的回复:SQL code?1234567891011121314151617181920212223--这样?if object_id('[TB]') is not null drop table [TB]gocreate table [TB] (a int,subject nvarchar(4))insert into [TB]sel……
参考http://msdn.microsoft.com/zh-cn/library/ms189885(v=sql.105).aspx 就是对应xml类型的一种处理方法。
wu5224311 2013-03-05
  • 打赏
  • 举报
回复
引用 11 楼 OrchidCat 的回复:
SQL code?1234567891011121314151617181920212223--这样?if object_id('[TB]') is not null drop table [TB]gocreate table [TB] (a int,subject nvarchar(4))insert into [TB]select 1,'语文' union allse……
请问一下··你xml path('')), 1, 1, '' 这里是什么意思?
wu5224311 2013-03-05
  • 打赏
  • 举报
回复
引用 17 楼 szm341 的回复:
哦,我写错了,少拼接了一对儿单引号,不过我写的是例子,你就不能改成你自己的列名吗? where student=''张三''
还是谢谢··
wu5224311 2013-03-05
  • 打赏
  • 举报
回复
引用 17 楼 szm341 的回复:
哦,我写错了,少拼接了一对儿单引号,不过我写的是例子,你就不能改成你自己的列名吗? where student=''张三''
弄好了···你以为我会不改么?····
szm341 2013-03-05
  • 打赏
  • 举报
回复
哦,我写错了,少拼接了一对儿单引号,不过我写的是例子,你就不能改成你自己的列名吗? where student=''张三''
wu5224311 2013-03-05
  • 打赏
  • 举报
回复
引用 15 楼 wu5224311 的回复:
引用 14 楼 szm341 的回复:报什么错啊,你自己难道没有改改表名列名什么的啊 我条件是这样加的···where 学生姓名='张三' 报错··张三附近有语法错误···情何以堪··
我不写where的时候··运行时正常的··但是会出所有的结果··我只要其中的一条记录··
wu5224311 2013-03-05
  • 打赏
  • 举报
回复
引用 14 楼 szm341 的回复:
报什么错啊,你自己难道没有改改表名列名什么的啊
我条件是这样加的···where 学生姓名='张三' 报错··张三附近有语法错误···情何以堪··
szm341 2013-03-05
  • 打赏
  • 举报
回复
报什么错啊,你自己难道没有改改表名列名什么的啊
wu5224311 2013-03-05
  • 打赏
  • 举报
回复
引用 12 楼 szm341 的回复:
所以说,你自己加一个where条件筛选就行了啊 declare @sql nvarchar(1000) select @sql=isnull(@sql,'')+',max(case when [course]='''+[course]+''' then [score] else 0 end)['+[course]+']' from (select distinct……
我加了这个筛选条件··没有用····加这里会报错··
szm341 2013-03-05
  • 打赏
  • 举报
回复
所以说,你自己加一个where条件筛选就行了啊 declare @sql nvarchar(1000) select @sql=isnull(@sql,'')+',max(case when [course]='''+[course]+''' then [score] else 0 end)['+[course]+']' from (select distinct [course] from tb)t exec('select [student]'+@sql+' from tb where 学生姓名='张三' group by [student]')
Mr_Nice 2013-03-05
  • 打赏
  • 举报
回复

--这样?
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (a int,subject nvarchar(4))
insert into [TB]
select 1,'语文' union all
select 1,'数学' union all
select 1,'英语' union all
select 2,'语文' union all
select 2,'物理'

select * from [TB]


select a, [subject]=stuff((select ','+[subject] from tb t where a=tb.a for xml path('')), 1, 1, '') 
from tb 
WHERE a=1
group by a 

/*
a	subject
1	语文,数学,英语
*/
wu5224311 2013-03-05
  • 打赏
  • 举报
回复
引用 9 楼 szm341 的回复:
6L给的就对的,你又没给什么表结构,自己拿去再改改,不能什么都拿现成的啊
表结构就和4楼的差不多··6L给的答案里面没有筛选···跑出来的结果是所有的排序···我只要一个学生的成绩··如何让写sql?
szm341 2013-03-05
  • 打赏
  • 举报
回复
6L给的就对的,你又没给什么表结构,自己拿去再改改,不能什么都拿现成的啊
wu5224311 2013-03-05
  • 打赏
  • 举报
回复
帖子不能沉啊····来个人解决··来个人解决···
wu5224311 2013-03-04
  • 打赏
  • 举报
回复
引用 6 楼 hjywyj 的回复:
declare @sql nvarchar(1000) select @sql=isnull(@sql,'')+',max(case when [course]='''+[course]+''' then [score] else 0 end)['+[course]+']' from (select distinct [course] from tb)t exec('……
你也没有对数据进行筛选啊··我只要一个学生的数据··不是要所有学生的数据···
  • 打赏
  • 举报
回复
declare @sql nvarchar(1000) select @sql=isnull(@sql,'')+',max(case when [course]='''+[course]+''' then [score] else 0 end)['+[course]+']' from (select distinct [course] from tb)t exec('select [student]'+@sql+' from tb group by [student]')
wu5224311 2013-03-04
  • 打赏
  • 举报
回复
引用 3 楼 sailwang 的回复:
if not object_id('Class') is null drop table Class Go Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int) Insert Class select N'张三',N'语文',78 union all s……
你这个是静态sql···如果可以的话··我需要一个动态sql···
wu5224311 2013-03-04
  • 打赏
  • 举报
回复
补充一下··· 数据可能是 学年a 科目 subject 1 语文 1 数学 1 英语 2 语文 2 物理 我现在只需要输出第一学年的科目··· 就是 只需要输出 语文 数学 英语
jmsail 2013-03-04
  • 打赏
  • 举报
回复
if not object_id('Class') is null drop table Class Go Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int) Insert Class select N'张三',N'语文',78 union all select N'张三',N'数学',87 union all select N'张三',N'英语',82 union all select N'张三',N'物理',90 union all select N'李四',N'语文',65 union all select N'李四',N'数学',77 union all select N'李四',N'英语',65 union all select N'李四',N'物理',85 Go select * from class ------------------------------------- select * from Class pivot (max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b 昨天给了,可能是有广告删了. 希望能帮助到你.
wu5224311 2013-03-04
  • 打赏
  • 举报
回复
没有人能给个例子么?···急用···
加载更多回复(1)

34,590

社区成员

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

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