Sql判断是否上一条记录 select 姓名=case when 学科=(select min(学科) from TB where 姓名=A.姓名) then 姓名 else '' end, 年龄,学科from TB A 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 declare @T table (姓名 varchar(20),年龄 int,学科 varchar(20))insert @T select '小王' , 18 , '语文' insert @T select '小王' , 18 , '数学' insert @T select '小王' , 18 , '外语' insert @T select '小王' , 18 , '历史'insert @T select '小李' , 18 , '语文' insert @T select '小李' , 18 , '数学' insert @T select '小李' , 18 , '外语' insert @T select '小李' , 18 , '历史'select 姓名=case when 学科=(select max(学科) from @T where 姓名=A.姓名) then 姓名 else '' end, 年龄,学科from @T Aorder by case when 姓名='' then 2 else 1 end/*姓名 年龄 学科-------------------- ----------- --------------------小王 18 语文 18 数学 18 外语 18 历史小李 18 语文 18 数学 18 外语 18 历史(8 行受影响)*/ create table tb(姓名 varchar(10), 年龄 varchar(10) , 学科 varchar(10))insert into tb values('小王', 18, '语文') insert into tb values('小王', 18, '数学') insert into tb values('小王', 18, '外语') insert into tb values('小王', 18, '历史') goselect 姓名 = case when 学科 = (select max(学科) from tb where 姓名 = A.姓名) then 姓名 else '' end, 年龄 = case when 学科 = (select max(学科) from tb where 姓名 = A.姓名) then 年龄 else '' end, 学科from tb Aorder by 姓名 descdrop table tb/*姓名 年龄 学科 ---------- ---------- ---------- 小王 18 语文 数学 外语 历史(所影响的行数为 4 行)*/ --这些方法.则是用拼音去判断..当你有科目的首字母拼音是在Y后面的.那就不对了.--2005的declare @T table (姓名 varchar(20),年龄 int,学科 varchar(20))insert @T select '小王' , 18 , '语文' insert @T select '小王' , 18 , '数学' insert @T select '小王' , 18 , '外语' insert @T select '小王' , 18 , '历史'insert @T select '小李' , 18 , '语文' insert @T select '小李' , 18 , '数学' insert @T select '小李' , 18 , '外语' insert @T select '小李' , 18 , '历史'select case when 学科=min_k then 姓名 else '' end 姓名, 年龄,学科from( select *,max(学科) over(partition by 姓名) min_k from @T) torder by case when 姓名='' then 1 else 0 end/*姓名 年龄 学科-------------------- ----------- --------------------小李 18 语文 18 数学 18 外语 18 历史小王 18 语文 18 数学 18 外语 18 历史(8 行受影响)*/ 帮忙看下这个查询 请问这两本书的差别 这个SQL怎么写,不知道条件该怎么下? 如何查看sql server的资源使用情况? SQL Server 简单问题 远程SQL 连接问题 如何设置随机种子从1开始.... 如何写一个触发器,触发条件为当前日期变更? 事务问题一问? 有关存储过程,再次发问! SQL 高手看看,这种情况如何解决 如何指定SQL SERVER2000最大能使用到5G的内存
insert @T select '小王' , 18 , '语文'
insert @T select '小王' , 18 , '数学'
insert @T select '小王' , 18 , '外语'
insert @T select '小王' , 18 , '历史'
insert @T select '小李' , 18 , '语文'
insert @T select '小李' , 18 , '数学'
insert @T select '小李' , 18 , '外语'
insert @T select '小李' , 18 , '历史'
select
姓名=case when 学科=(select max(学科) from @T where 姓名=A.姓名) then 姓名 else '' end,
年龄,学科
from @T A
order by case when 姓名='' then 2 else 1 end/*
姓名 年龄 学科
-------------------- ----------- --------------------
小王 18 语文
18 数学
18 外语
18 历史
小李 18 语文
18 数学
18 外语
18 历史(8 行受影响)
*/
insert into tb values('小王', 18, '语文')
insert into tb values('小王', 18, '数学')
insert into tb values('小王', 18, '外语')
insert into tb values('小王', 18, '历史')
goselect
姓名 = case when 学科 = (select max(学科) from tb where 姓名 = A.姓名) then 姓名 else '' end,
年龄 = case when 学科 = (select max(学科) from tb where 姓名 = A.姓名) then 年龄 else '' end,
学科
from tb A
order by 姓名 descdrop table tb/*
姓名 年龄 学科
---------- ---------- ----------
小王 18 语文
数学
外语
历史(所影响的行数为 4 行)
*/
--2005的
declare @T table (姓名 varchar(20),年龄 int,学科 varchar(20))
insert @T select '小王' , 18 , '语文'
insert @T select '小王' , 18 , '数学'
insert @T select '小王' , 18 , '外语'
insert @T select '小王' , 18 , '历史'
insert @T select '小李' , 18 , '语文'
insert @T select '小李' , 18 , '数学'
insert @T select '小李' , 18 , '外语'
insert @T select '小李' , 18 , '历史'select case when 学科=min_k then 姓名 else '' end 姓名,
年龄,学科
from
(
select *,max(学科) over(partition by 姓名) min_k
from @T
) t
order by case when 姓名='' then 1 else 0 end/*
姓名 年龄 学科
-------------------- ----------- --------------------
小李 18 语文
18 数学
18 外语
18 历史
小王 18 语文
18 数学
18 外语
18 历史(8 行受影响)
*/