CREATE TABLE [dbo].[tb](
[姓名] [varchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[课程] [varchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[分数] [int] NULL
) ON [PRIMARY]
SELECT pvt.姓名,语文,数学,物理,总分,平均分,名次=RANK() OVER(ORDER BY 平均分 DESC)
FROM tb
PIVOT
(
MAX(分数)
FOR 课程 IN(语文,数学,物理)
) pvt
CROSS APPLY (SELECT 总分=SUM(分数),平均分=AVG(分数) FROM tb t WHERE t.姓名=pvt.姓名) as avgTable
PVIOT 实现行列的转换
查询结果显示为:
姓名|语文|数学|物理|总分|平均分
test|90 |12 |67 |169|