读书人

一个简单的查询语句上次没有解决哦!

发布时间: 2012-04-26 14:01:31 作者: rapoo

一个简单的查询语句,上次没有解决哦!考考大家!
有一张销售表tb_account如下:
user account
001 100.00
002 34.00
003 89.00
005 130.00
006 634.00
007 689.00
......
......

user列指的是工号,account指的是金额
现在需要计算一个数据:
找出满足条件 account 【总和大于等于500】(sum(account) >= 500 )的第一个user。

比如在上面的例子中,100+34+89+130+634 >= 500,所以 006 就是第一个满足条件的user。

[解决办法]
select top 1 user,总和 from(select user,sum(account) as 总和 from tb_account group by user) where 总和>500 order by 总和 desc
[解决办法]
按你说的006是第一个

任何小于500都不满足,

所以就是查第一个大于500的咯?
[解决办法]
500哪里来的
[解决办法]
select user sum(account) from 表 group by user having sum(account)>500
[解决办法]
select top 1 * from T where [user] = (select [user] from T group by [user] having SUM(account)>500)

[解决办法]

探讨
select user sum(account) from 表 group by user having sum(account)>500

[解决办法]
select top 1 user from 表 where accout>500
[解决办法]
- -!围观学习
[解决办法]
SQL code
DECLARE @TB TABLE([USER] NVARCHAR(10),ACCOUNT DECIMAL(18,2))INSERT INTO @TBSELECT '001',100.00 UNION ALLSELECT '002',34.00 UNION ALLSELECT '003',89.00 UNION ALLSELECT '005',130.00 UNION ALLSELECT '006',634.00 UNION ALLSELECT '007',689.00SELECT *,RCOUNT=(SELECT SUM(ACCOUNT) FROM @TB WHERE [USER]<=T.[USER]) FROM @TB T/*USER    ACCOUNT    RCOUNT001    100.00    100.00002    34.00    134.00003    89.00    223.00005    130.00    353.00006    634.00    987.00007    689.00    1676.00*/--取大于500的第一条即可SELECT TOP 1 * FROM (SELECT *,RCOUNT=(SELECT SUM(ACCOUNT) FROM @TB WHERE [USER]<=T.[USER]) FROM @TB T) B WHERE RCOUNT>500/*USER    ACCOUNT    RCOUNT006    634.00    987.00*/
[解决办法]
探讨
请看清楚,是account累加起来正好满足累加之和大于500(这个数是一个变量)的第一个user

[解决办法]
探讨
请看清楚,是account累加起来正好满足累加之和大于500(这个数是一个变量)的第一个user

[解决办法]
SELECT top 1 t2.[user]
FROM [tb_account] as t1 , [tb_account] as t2 where t1.[user]<=t2.[User] group by t2.[User] having sum(t1.[account]) >500
[解决办法]
找出满足条件 account 【总和大于等于500】(sum(account) >= 500 )的第一个user。

你这个描述,应该就是寻找某个user的销售额超过500的结果集的第一条记录

难道不是吗


[解决办法]
select ROW_NUMBER() OVER (ORDER BY userASC)AS ROWID,user,account into #temp from tb_account a

select user from #temp a where (select sum(account ) from #temp where ROWID<a.ROWID)<500
and (select COsum(account ) from #temp where ROWID<a.ROWID+1)>500
[解决办法]
探讨
laowang134
(灰)

太感谢,就是我要结果。想了好久


[解决办法]
看看热闹
[解决办法]
探讨

引用:
laowang134
(灰)

太感谢,就是我要结果。想了好久

额,你题目描述根本不是laowang134的解答的样子,虽然看见你这个回答,我也明白你的意思了。。。。

之前csdn n多贴讨论过这个,很容易的,就是记录和记录之前的累加比较。。

哎,误导一大片啊

[解决办法]
这表设计的绝对很有内涵
[解决办法]
select user from tb_account group by user having sum(account)>500 order by asc where rowid<=1
[解决办法]
用窗口函数,很容易解决这个问题。
[解决办法]
高手如云啊
[解决办法]
Oracle中可以这样:
select b.* from
(select t.user,t.account,
(select sum(a.account) from tb_account a where a.user<=t.user) accountsum
from tb_account t) b
where b.accountsum>=500;
[解决办法]
很强啊,楼上正解。。
[解决办法]
楼上正解,很强大啊。。。
[解决办法]
本人测试了很久,终于有了结果。
下面是我的测试过程。
你可以从上到下copy 我的SQL 语句运行算结果。希望对你有所帮助。最后一条SQL 实现了!!!

第一步:
SQL code
select row_Number()over(order by Users asc) as row, Users,Account from Tb_account
[解决办法]
补:
如果看不明,
你copy 第二步的SQL
一运行 ,大概就知道怎么回事了!

读书人网 >asp.net

热点推荐