菜鸟求sql语句,不想用控件时间,只想用sql语句。。(100)

  • 主题发起人 主题发起人 wanglong5
  • 开始时间 开始时间
W

wanglong5

Unregistered / Unconfirmed
GUEST, unregistred user!
正常情况的显示:姓名 科目 成绩刘德华 语文 89刘德华 英语 88刘德华 数学 96张学友 语文 95张学友 英语 87张学友 数学 72在dbgrid显示为:姓名 科目 成绩刘德华 语文 89 英语 88 数学 96张学友 语文 95 英语 87 数学 72高手们,现身吧!!
 
写个存储过程就可以实现了
 
一个思路:step1: 首先要排序,按照名称排序,并且加上顺序索引——作为 Astep2: A和A自连接查询,条件是 (A1.index = A2.index+1) AND (A1.Name <> A2.Name) 注意用外连接,这样可以过滤出第一次出现的名称step3: 显示A2中的数据,即学科和成绩,显示A1的名称---------------------------------太麻烦了,还是建议你在客户端处理啦
 
假定你的表名是T1, 但还需要一个字段当唯一键,假设这个字段是ID用以下代码即可:select Name=case when a.ID=b.ID then a.Name else '' end,a.Subject,a.Scorefrom t1 ajoin (select Name,min(id) idfrom t1 group by name) b on a.Name=b.Name
 
for SQL 2005, 2008:;with t as(select *,ord=(row_number() over (partition by [姓名] order by [姓名])) from tb)select [姓名]=case when ord=1 then [姓名] else '' end,[科目],[成绩] from t--测试结果:/*姓名 科目 成绩刘德华 语文 89 英语 88 数学 96张学友 语文 95 英语 87 数学 72*/
 
ui问题,和数据无关.
 
我赞成用外联结的方法进行
 
用分析函数,即可实现,先按姓名分组得到顺序号,为1 的显示名称,否则为空select case rankNo when 1 then 姓名 else null end as 新姓名, 科目,成绩from ( select 姓名,科目,成绩, rank() over(partition 姓名 order by 科目) rankNofrom table1)order by 姓名,rankNo
 
多人接受答案了。
 
后退
顶部