表格是这样子的
name subject grade
张三 语文 90
张三 数学 80
张三 英语 70
李四 语文 60
李四 数学 90
李四 英语 80用查询语句 使查出来的东西 显示成
姓名 语文 数学 英语
张三 90 80 70
李四 60 90 80典型的行转列问题 我用的SQL代码是select name as 姓名 ,max(case subject when '语文' then grade else 0 end) 语文,max(case subject when '数学' then grade else 0 end) 数学,max(case subject when '英语' then grade else 0 end) 英语 from grades group by name虽然实现了功能 但是上头又给我新的难题,说我这种查询语句 对大型数据内容 比如上百万的数据就查的很慢了
然后叫我用分页查询来辅助完成上面的查询,从而优化查询。我的上网查了一下 研究了一下 弄出个代码select top 6 *
from grades
where name not in
(select top 0 name from grades order by name)
order by name
之后我就完全不知道要怎么结合这些东西 完成查询的优化了,求高手指点,我是新手!今天刚注册。
name subject grade
张三 语文 90
张三 数学 80
张三 英语 70
李四 语文 60
李四 数学 90
李四 英语 80用查询语句 使查出来的东西 显示成
姓名 语文 数学 英语
张三 90 80 70
李四 60 90 80典型的行转列问题 我用的SQL代码是select name as 姓名 ,max(case subject when '语文' then grade else 0 end) 语文,max(case subject when '数学' then grade else 0 end) 数学,max(case subject when '英语' then grade else 0 end) 英语 from grades group by name虽然实现了功能 但是上头又给我新的难题,说我这种查询语句 对大型数据内容 比如上百万的数据就查的很慢了
然后叫我用分页查询来辅助完成上面的查询,从而优化查询。我的上网查了一下 研究了一下 弄出个代码select top 6 *
from grades
where name not in
(select top 0 name from grades order by name)
order by name
之后我就完全不知道要怎么结合这些东西 完成查询的优化了,求高手指点,我是新手!今天刚注册。
USE Test
GO
--姓名 语文 数学 英语
--张三 90 80 70
--李四 60 90 80--if object_id('t1') is not null
-- drop table t1
--Go
Create table t1([name] nvarchar(2),[subject] nvarchar(2),[grade] smallint)
Insert into t1
Select N'张三',N'语文',90
Union all Select N'张三',N'数学',80
Union all Select N'张三',N'英语',70
Union all Select N'李四',N'语文',60
Union all Select N'李四',N'数学',90
Union all Select N'李四',N'英语',80
SELECT name,语文,数学,英语 FROM t1
PIVOT (
MAX(grade) FOR subject IN (语文,数学,英语)
)p
主体是这句:SELECT name,语文,数学,英语 FROM t1
PIVOT (
MAX(grade) FOR subject IN (语文,数学,英语)
)p
老李 NULL NULL 75
老李 NULL 100 NULL
李四 87 NULL NULL
李四 NULL 40 NULL
李四 NULL NULL 70
……
怎么才能 让他们合在一起呢
PIVOT (
MAX(grade) FOR subject IN (语文,数学,英语)
)p
内容的话 就和上面的差不多了
SELECT name as 姓名,语文,数学,英语 FROM grades
PIVOT (
MAX(grade) FOR subject IN (语文,数学,英语)
)p
SELECT [name],[subject],[grade] FROM t1
)
SELECT name as 姓名,语文,数学,英语 FROM c
PIVOT (
MAX(grade) FOR subject IN (语文,数学,英语)
)p
就是能用SQL server的分页技术 或子查询技术 将我刚才查出来的那些东西 随意分页么