34,590
社区成员
发帖
与我相关
我的任务
分享
create table #t(姓名 varchar(10),科目 varchar(10),成绩 int)
insert into #t(姓名,科目,成绩)
select '张三','数学',60 union all
select '张三','语文',70 union all
select '张三','英语',80 union all
select '李四','数学',65 union all
select '李四','语文',75 union all
select '李四','英语',85
-- 写法1
select 姓名,[数学],[语文],[英语]
from #t a
pivot(max(成绩) for 科目 in([数学],[语文],[英语])) p
order by 姓名 desc
/*
姓名 数学 语文 英语
---------- ----------- ----------- -----------
张三 60 70 80
李四 65 75 85
(2 row(s) affected)
*/
-- 写法2
declare @tsql varchar(6000)
select @tsql='select 姓名,'
+stuff((select ',['+科目+']=max(case when 科目='''+科目+''' then 成绩 else -1 end)'
from (select distinct 科目 from #t) t
order by case 科目 when '数学' then 1 when '语文' then 2 when '英语' then 3 else 99 end
for xml path('')),1,1,'')
+'from #t
group by 姓名
order by 姓名 desc'
exec(@tsql)
/*
姓名 数学 语文 英语
---------- ----------- ----------- -----------
张三 60 70 80
李四 65 75 85
(2 row(s) affected)
*/
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(姓名 nvarchar(10),科目 NVARCHAR(10),成绩 int)
INSERT INTO t
SELECT '张三','数学','60'
UNION ALL SELECT '张三','语文','70'
UNION ALL SELECT '张三','英语','80'
UNION ALL SELECT '李四','数学','65'
UNION ALL SELECT '李四','语文','75'
UNION ALL SELECT '李四','英语','85'
SELECT * FROM t PIVOT(MAX(成绩) for 科目 in([语文],[数学],[英语])) as t
/*
姓名 语文 数学 英语
李四 75 65 85
张三 70 60 80
*/