DECLARE @tbl TABLE (
id INT IDENTITY(1,1) NOT NULL,
name VARCHAR(20),
score DECIMAL(18,2)
)
INSERT INTO @tbl(name, score)
SELECT 'a', 80 UNION SELECT 'b', 90 UNION SELECT 'c', 70 UNION SELECT 'd', 60
DECLARE @Name VARCHAR(20),
@Score DECIMAL(18,2),
@TotScore DECIMAL(18,2),
@TmpScore DECIMAL(18,2),
@TmpName VARCHAR(2000)
SELECT * FROM @tbl ORDER BY id DESC
/*
id name score
----------- -------------------- ---------------------------------------
4 d 60.00
3 c 70.00
2 b 90.00
1 a 80.00
*/
--传入数字参数
SET @TotScore=100
SET @TmpScore=0
SET @TmpName=''
DECLARE tbl CURSOR FOR
SELECT name, score FROM @tbl ORDER BY id DESC
OPEN tbl
FETCH NEXT FROM tbl INTO @Name, @Score
WHILE @@FETCH_STATUS=0
BEGIN
SET @TmpScore=@TmpScore+@Score
SET @TmpName=@TmpName+','+@Name
IF @TmpScore<@TotScore
BEGIN
FETCH NEXT FROM tbl INTO @Name, @Score
END
ELSE
BREAK;
END
CLOSE tbl
DEALLOCATE tbl
SELECT @TmpName, @TmpScore
/*
RetNames RetScore
-------------------------------- ---------------------------
,d,c 130
*/
问题详细如下:
我需要根据一个传入的数字返回一个查询语句满足这个数字的记录数,比如上述的测试,具体示例如下:
1、传入100 返回D和C
2、传入60 返回D
3、传入70 返回D
4、传入130 返回D和C
5、传入150 返回B/C/D
总之传入的数字返回的结果是根据向上取值的规则进行,现在我通过游标实现了目的,因为我这个只是一个数字的实现效果,现在我有10000多条数据需要根据这个数字来到达该目的,在外边再加了一个游标,发现运行的效果太差了,不知道是否有方法把这一段sql转换成一个sql语句呢?
求助各个大神了!!