transact-sql问题

时间:2010-10-14 05:06:49

标签: sql tsql

假设tableA中有100条记录,tableA包含一个名为“price”的列。

如果价格总和>如何选择前n条记录?一定数量(例如1000)而不使用光标?

感谢

2 个答案:

答案 0 :(得分:1)

前N意味着某种顺序,你没有提供,所以我假设任何随机顺序。

您可以在ROW_NUMBER()的OVER子句中更改此内容。

尝试类似

的内容
DECLARE @Table TABLE(
        Price FLOAT
)

INSERT INTO @Table SELECT 1
INSERT INTO @Table SELECT 11
INSERT INTO @Table SELECT 12
INSERT INTO @Table SELECT 15
INSERT INTO @Table SELECT 10
INSERT INTO @Table SELECT 65
INSERT INTO @Table SELECT 100

DECLARE @TotalPrice FLOAT
SELECT  @TotalPrice = 100

;WITH Vals AS (
        SELECT  *,
                ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) RNR
        FROM    @Table
)
, Totals AS (
        SELECT  v.RNR,
                SUM(vP.Price) TotalPrice
        FROM    Vals v LEFT JOIN
                Vals vP ON  v.RNR >= vP.RNR
        GROUP BY    v.RNR
)
, LimitValue AS (
        SELECT  TOP 1 
                RNR
        FROM    Totals
        WHERE   TotalPrice >= @TotalPrice
        ORDER BY    RNR
)
SELECT  *
FROM    Vals 
WHERE   RNR <= (
                    SELECT  RNR
                    FROM    LimitValue
                )

答案 1 :(得分:-1)

从tableA中选择价格 价格&gt; 1000 限制n;

n - 没有。您想要的结果集

中的记录

- 干杯