首页 新闻 会员 周边 捐助

求sql写法

1
悬赏园豆:80 [已解决问题] 解决于 2014-11-04 11:13

select * from(
select 1 a,0 sort
union all
select 2,2 sort
union all
select 1,3 sort
union all
select 2,4 sort
union all
select 1,5 sort
union all
select 2,6 sort
union all
select 1,7 sort
union all
select 2,8 sort
union all
select 1 ,9 sort)x  order by sort

 

我现在有一个参数 5 那么我只要显示1-4行结果 sum(a) 结果6 > 5条件满足

显示结果

1 0

2 1

1 2

2 3

 

可能大家都没看明白我提的问题,事实上是一个财务冲帐问题.

union 事实上是一个表..是欠帐信息,sort字段是顺序号,相当于主键.a字段表示金额.

当付款某一个金额总额的时候要按顺序找出对应的单进行冲减.譬如例子5,那么从0-4条

加起来的金额就>=5,所以只要找出0-4就是我在下面列出的结果.

再举一个3..那么1-2的金额和>=3 那结果就是

1 0

2 1

这样的需求是因为在程序中如果一次查出所有记录,然后进行逐一对比会比较浪费资源,

还有一个做法是使用游标逐一处理.单我用的数据库access不支持游标.所以就有这个问题.

极其希望能找到一个好的查询方案....

Kiver的主页 Kiver | 初学一级 | 园豆:24
提问于:2014-10-21 01:18
< >
分享
最佳答案
0

额,看了半天总算看懂了,楼主写的后面的结果集有点误导人,本身是一个表却和上面的SQL语句错行了一个,sort是序号

要实现你的需求:

1:创建个临时表 #temp 里面插入你查询的SQL内容(要是有现成的表就直接放进去)

2:select sum(a) from #temp where sort<5   

当然以上最好建立个存储过程,因为比较灵活,传参数,输出值,要是不能理解,建议最好直接点 帖出你的表结构,然后说出实际你的想法,你这种想用最简单的例子来表达你的想法是正确的,不过对表达能力有一定的要求,有时候还不如直接点好

收获园豆:20
风醉 | 小虾三级 |园豆:1197 | 2014-10-21 14:18
其他回答(6)
0

有很多时候我不明白,既然设计已经如此糟糕了,还有必要纠结一句SQL还是好多句吗?

如果不要求一句实现的话,

弄个存储过程,弄个cursor,循环一下就搞定了。

收获园豆:20
爱编程的大叔 | 园豆:30844 (高人七级) | 2014-10-21 08:14
0

查询前4行直接top 4,但是搞不明白sort的值怎么改变了。 

收获园豆:10
会飞的金鱼 | 园豆:881 (小虾三级) | 2014-10-21 08:27
0

我表示没看懂这个sql语句。。。

收获园豆:5
幻天芒 | 园豆:37205 (高人七级) | 2014-10-21 08:37
0

同意楼上,没看懂你想干什么,也没有看懂你的SQL,感觉这样写是不能运行的。

要不你把你要做的实际情况贴出来

收获园豆:5
Albert Fei | 园豆:2102 (老鸟四级) | 2014-10-21 10:45
0

把(select * from(
select 1 a,0 sort
union all
select 2,2 sort
union all
select 1,3 sort
union all
select 2,4 sort
union all
select 1,5 sort
union all
select 2,6 sort
union all
select 1,7 sort
union all
select 2,8 sort
union all
select 1 ,9 sort)x  order by sort)

作为一个视图进行查询,加上/*NO MERGE*/

取1-4行用 rownum 判断。

不过你的子查询语句中没有FROM 你注意下,别报错。

收获园豆:10
CaiYongji | 园豆:1267 (小虾三级) | 2014-10-21 10:53
0

既然你是access数据库,你可以DataReader读数据(类似游标),然后在程序代码里面一次读取一条进行汇总(同时将主键Sort字段放入List<int> lstTemp里面去),当满足条件后,将lstTemp就是满足条件的主键集合。

至于剩下的,你想怎么处理都可以了。

收获园豆:10
Tim Lee | 园豆:350 (菜鸟二级) | 2014-10-30 11:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册