考考你的SQL熟悉情度.(50分)

  • 主题发起人 主题发起人 liangexcel
  • 开始时间 开始时间
L

liangexcel

Unregistered / Unconfirmed
GUEST, unregistred user!
一个表,两个字段.一个是序列号,一个是值
数据如下
1 3
2 3
3 1
4 6
5 5
6 7
7 3
8 2
9 1
用SQL语句写出查询每三条记录的和值
1 (记录1的和值)
2 (记录1,2的和值)
3 (记录1,2,3的和值)
4 (记录2,3,4的和值)
5 (记录3,4,5的和值)
6 (记录4,5,6的和值)
7 (记录5,6,7的和值)
8 (记录6,7,8的和值)
9 (记录7,8,9的和值)
另一条也是三条记录的和值,但是不同上面的.
1-3的和值
4-6的和值
7-9的和值.
谁有办法写出这样的SQL语句的?
 
这个东西用程序循环一次就搞定了
为什么一定要用SQL来写呢?
实在要用,用游标吧
 
别用口说,用代码来说话吧.要考虑效率哦.
可以在数据库实现的,我不想在DELPHI实现.
 
只能用游标,
 
用游标也行,写出你的代码吧,看是否真的能实现?
 
游标提供了一种遍历表记录的方法,就好象在程序中用一个循环遍历表一样
提供个思路给你
声明三个变量a1,a2,a3
把当前访问到的记录的值放到a3,
a3的原值放到a2,
a2的原值放到a1
最后,你想要的值就是a1+a2+a3

至于游标怎么使用,上百度,Google去搜来学吧
 
我现在实现的方法不用游标.
 
第一個

SELECT [序列號],(SELECT SUM(T1.值) FROM 表1 T1 WHERE T1.序列號 IN (表1.序列號-2,表1.序列號-1,表1.序列號)) AS A
FROM 表1

第二個

SELECT ([序列號]-1)/3 AS A,SUM([值]) AS B
FROM 表1
GROUP BY ([序列號]-1)/3
 
to zhlu:谢谢你的指点.你的代码比我的还在少,但是效率更强,高手呀.
 
1.select 序列号,(select sum(值) from (select top 3 * from tablename where 序列号<=Z1.序列号 order by 序列号 desc) Z2) as 值 from tablename Z1
2.select 序列号,(select sum(值) from (select top 3 * from tablename where 序列号<=Z1.序列号 order by 序列号 desc) Z2) as 值 from tablename Z1 where (select count(值) from (select * from tablename where 序列号<=Z1.序列号) Z3)%3=0
 
多人接受答案了。
 

Similar threads

回复
0
查看
591
谦行
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
927
SUNSTONE的Delphi笔记
S
后退
顶部