解决方案 »
- 帮忙推荐几本SQL SERVER的书籍
- 求MS SQL Server 2005 数据库教程
- 求sql语句流水单号
- Windows 2000 Professional可装SQL SERVER2000哪些版本
- 这个SQL语句的结果是什么?为什么?
- ***************求SQL语句****************
- 怎么不能恢复数据库(请大家看看这段代码)
- 一个分组查询的问题!
- 高分---在VC里用ADO对ACCESS 2000进行模糊查询的语法
- sql server errors 14010
- SQL 2008 数据缓存配置 实时存储问题!求帮助;
- 求一个查询语句,把一张表中的某两列插入另一表,同时另一表别的列还要插入新数据
--> 测试数据:[test]
if object_id('[test]') is not null
drop table [test]
create table [test](
[studentId] varchar(1),
[subject] varchar(4),
[point] int,
[classOrder] int,
[gradeOrder] int
)
insert [test]
select 'A','语文',90,1,2 union all
select 'A','数学',80,4,15 union all
select 'A','英语',95,2,4 union all
select 'B','语文',85,6,25 union all
select 'B','数学',98,1,2 union all
select 'B','英语',100,1,1
declare @str varchar(max)
set @str=''
select
@str=@str+','+[subject]+'=max(case when [subject]='+QUOTENAME([subject],'''')
+' then [point] else 0 end),'
+'classOrder'+'=max(case when [subject]='+QUOTENAME([subject],'''')
+' then [classOrder] else 0 end),'
+'gradeOrder'+'=max(case when [subject]='+QUOTENAME([subject],'''')
+' then [gradeOrder] else 0 end)'
from test group by [subject]
exec('select [studentId]'+@str+' from test group by [studentId]')
/*
studentId 数学 classOrder gradeOrder 英语 classOrder gradeOrder 语文 classOrder gradeOrder
-------------------------------------------------------------------------------------------------------------------
A 80 4 15 95 2 4 90 1 2
B 98 1 2 100 1 1 85 6 25
*/
select * from student A
left join dbo.studentPoint(@testId) B on A.studentId = A.studentId
你的科目不确定,必须动态,用pivot反而会复杂这个问题。你可以把这个语句封装到存储过程
select * from student A
left join dbo.studentPoint(@testId) B on A.studentId = A.studentId这种存储过程能否实现,我是说存储过程返回的数据集想跟其他表进行表关联,是不是要把存储过程返回的数据集插入到临时表才行,谢谢