22,207
社区成员
发帖
与我相关
我的任务
分享
create table tb(std_name nvarchar(20),test_name nvarchar(20),mark int)
insert into tb values(N'谢丹静', N'科学水平1', 60)
insert into tb values(N'邹李超', N'科学水平1', 80)
insert into tb values(N'谢丹静', N'科学水平2', 75)
insert into tb values(N'邹李超', N'科学水平2', 80)
go
declare @sql nvarchar(4000)
select @sql = isnull(@sql + '],[' , '') + test_name from tb group by test_name
set @sql = '[' + @sql + ']'
exec('select * from(select * from tb) as a pivot(max(mark) for test_name in ('+@sql+'))as b ORDER BY std_name')
drop table tb
/*
std_name 科学水平1 科学水平2
-------------------- ----------- -----------
谢丹静 60 75
邹李超 80 80
(2 行受影响)
*/
CREATE TABLE [#tp]
(
[std_name] nvarchar(100) NULL ,
[test_name] nvarchar(100) NULL ,
[mark] int
)
GO
--插入测试数据
INSERT INTO [#tp] ([std_name],[test_name],[mark])
SELECT '谢丹静','科学水平1','60' UNION
SELECT '邹李超','科学水平1','80' UNION
SELECT '谢丹静','科学水平2','75' UNION
SELECT '邹李超','科学水平2','80'
GO
----方法一
SELECT [std_name],[科学水平1],[科学水平2] FROM [#tp]
PIVOT(MAX([mark]) FOR [test_name] IN([科学水平1],[科学水平2]))pvt
----方法二
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + test_name from [#tp] group by test_name
set @sql = '[' + @sql + ']'
exec('select * from(select * from [#tp]) as a pivot(max(mark) for test_name in ('+@sql+'))as b ORDER BY std_name')
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + test_name from [#tp] group by test_name
set @sql = '[' + @sql + ']'
exec('select * from(select * from [#tp]) as a pivot(max(mark) for test_name in ('+@sql+'))as b ORDER BY std_name')
std_name 科学水平1 科学水平2
------------------- ----------- -----------
谢丹静 60 75
邹李超 80 80
(2 row(s) affected)
SELECT [std_name],[科学水平1],[科学水平2] FROM [#tp]
PIVOT(MAX([mark]) FOR [test_name] IN([科学水平1],[科学水平2]))pvt
std_name 科学水平1 科学水平2
--------- ----------- -----------
谢丹静 60 75
邹李超 80 80
(2 row(s) affected)